home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / system-tools / tinymeter / source / tinymeter_prefs / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-21  |  93.3 KB  |  3,021 lines

  1. /// headers
  2. /* MUI */
  3. #include <libraries/mui.h>
  4.  
  5. /* System */
  6. #include <dos/dos.h>
  7. #include <graphics/gfxmacros.h>
  8. #include <workbench/workbench.h>
  9. #include <exec/memory.h>
  10. #include <datatypes/pictureclass.h>
  11. #include <libraries/locale.h>
  12.  
  13. /* Prototypes */
  14. #include <clib/alib_protos.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/dos_protos.h>
  17. #include <clib/icon_protos.h>
  18. #include <clib/graphics_protos.h>
  19. #include <clib/intuition_protos.h>
  20. #include <clib/gadtools_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <clib/asl_protos.h>
  23.  
  24. #ifndef __GNUC__
  25. #include <clib/muimaster_protos.h>
  26. #else
  27. #include <inline/muimaster.h>
  28. #endif
  29.  
  30. /* ANSI C */
  31. #include <stdlib.h>
  32. #include <string.h>
  33. #include <stdio.h>
  34.  
  35. #ifndef MAKE_ID
  36. #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  37. #endif
  38.  
  39. ///
  40. #define  STRINGARRAY YES
  41. #include "TinyMeterPrefs.lh"
  42. #include "tinymeter.h"
  43.  
  44. static struct MUI_CustomClass *CL_FieldsList;
  45. static struct MUI_CustomClass *CL_ChooseFields;
  46. static struct MUI_CustomClass *CL_MainWindow;
  47. static struct MUI_CustomClass *CL_Composer;
  48. static struct MUI_CustomClass *CL_Launcher;
  49.  
  50. #define USE_ABOUT_COLORS        YES
  51. #define USE_ABOUT_HEADER        YES
  52. #define USE_ABOUT_BODY          YES
  53.  
  54. #define USE_LOGO_COLORS         YES
  55. #define USE_LOGO_HEADER         YES
  56. #define USE_LOGO_BODY           YES
  57.  
  58. #define USE_HEADER_LOGO_COLORS  YES
  59. #define USE_HEADER_LOGO_HEADER  YES
  60. #define USE_HEADER_LOGO_BODY    YES
  61.  
  62. #define USE_QUESTION_COLORS     YES
  63. #define USE_QUESTION_HEADER     YES
  64. #define USE_QUESTION_BODY       YES
  65.  
  66. enum { MEN_PROJECT=1,MEN_ABOUT,MEN_OPEN,MEN_SAVE,MEN_QUIT,CMP_LOAD, CMP_SAVE, CMP_CANCEL, CMP_PROJECT };
  67.  
  68. /*************************************************************************************************/
  69. /* misc funcs                                                                                    */
  70. /*************************************************************************************************/
  71. ///
  72. ULONG DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...)
  73. {
  74.     return(DoSuperMethod(cl,obj,OM_NEW,&tag1,NULL));
  75. }
  76.  
  77. LONG xget(Object *obj,ULONG attribute)
  78. {
  79.     LONG x;
  80.     get(obj,attribute,&x);
  81.     return(x);
  82. }
  83.  
  84. initColor(struct GAU_Color *col,Object *obj)
  85. {
  86.     struct MUI_PenSpec pspec;
  87.  
  88.     if(col->pen==TRUE)
  89.     {
  90.     sprintf(&pspec.buf[0],"p%d\0",col->red);
  91.     set(obj,MUIA_Pendisplay_Spec,&pspec);
  92.     }
  93.     else
  94.     {
  95.     sprintf(&pspec.buf[0],"r%08lx,%08lx,%08lx\0",col->red,col->green,col->blue);
  96.     set(obj,MUIA_Pendisplay_Spec,&pspec);
  97.     }
  98. }
  99.  
  100. getColor(struct GAU_Color *col,Object *obj)
  101. {
  102.     struct MUI_PenSpec  *pspec;
  103.     char                *buf;
  104.     ULONG               *dummy1,dummy2,dummy3;
  105.  
  106.  
  107.     get(obj,MUIA_Pendisplay_Spec,&pspec);
  108.     if(buf=(char *)AllocVec(256L,MEMF_CLEAR))
  109.     {
  110.     strcpy(buf,&pspec->buf[0]);
  111.     if(buf[0])
  112.     {
  113.         switch (buf[0])
  114.         {
  115.         case    'r':
  116.             col->pen=(UWORD)FALSE;
  117.             sscanf(buf+1,"%lx,%lx,%lx",&dummy1,&dummy2,&dummy3);
  118.             col->red=(ULONG)dummy1;
  119.             col->green=(ULONG)dummy2;
  120.             col->blue=(ULONG)dummy3;
  121.             break;
  122.         case    'p':
  123.             col->pen=(UWORD)TRUE;
  124.             sscanf(buf+1,"%ld",&col->red);
  125.             break;
  126.         case    'm':
  127.             MUI_RequestA(NULL,NULL,0,"TinyMeterPrefs","BAD LUCK!","Please do not use MUI colors.\nThey are not supported by TinyMeter!\n\nUse Colormap or a RBG color instead.",NULL);
  128.             break;
  129.         }
  130.     }
  131.     FreeVec(buf);
  132.     }
  133. }
  134.  
  135. __saveds __asm void IntuiMsgFunc(__a1 struct IntuiMessage *imsg,__a2 struct FileRequester *req)
  136. {
  137.     if (imsg->Class==IDCMP_REFRESHWINDOW)
  138.         DoMethod(req->fr_UserData,MUIM_Application_CheckRefresh);
  139. }
  140.  
  141. char *getfilename(Object *win,char *title,char *pattern,BOOL save)
  142. {
  143.     static char buf[512];
  144.     struct FileRequester *req;
  145.     struct Window *w;
  146.     static LONG left=-1,top=-1,width=-1,height=-1;
  147.     Object *app = (Object *)xget(win,MUIA_ApplicationObject);
  148.     char *res = NULL;
  149.     static const struct Hook IntuiMsgHook = { { 0,0 },(VOID *)IntuiMsgFunc,NULL,NULL };
  150.  
  151.     get(win,MUIA_Window_Window,&w);
  152.     if (left==-1)
  153.     {
  154.         left   = w->LeftEdge+w->BorderLeft+2;
  155.         top    = w->TopEdge+w->BorderTop+2;
  156.         width  = w->Width-w->BorderLeft-w->BorderRight-4;
  157.         height = w->Height-w->BorderTop-w->BorderBottom-4;
  158.     }
  159.  
  160.     if (req=MUI_AllocAslRequestTags(ASL_FileRequest,
  161.         ASLFR_Window, w,
  162.         ASLFR_TitleText, title,
  163.         ASLFR_InitialLeftEdge, left,
  164.         ASLFR_InitialTopEdge , top,
  165.         ASLFR_InitialWidth   , width,
  166.         ASLFR_InitialHeight  , height,
  167.         ASLFR_InitialPattern , pattern,
  168.         ASLFR_DoSaveMode     , save,
  169.         ASLFR_DoPatterns     , TRUE,
  170.         ASLFR_RejectIcons    , TRUE,
  171.         ASLFR_UserData       , app,
  172.         ASLFR_IntuiMsgFunc   , &IntuiMsgHook,
  173.         TAG_DONE))
  174.     {
  175.         set(app,MUIA_Application_Sleep,TRUE);
  176.         if (MUI_AslRequestTags(req,TAG_DONE))
  177.         {
  178.             if (*req->fr_File)
  179.             {
  180.                 res = buf;
  181.                 strcpy(buf,req->fr_Drawer);
  182.                 AddPart(buf,req->fr_File,sizeof(buf));
  183.             }
  184.             left   = req->fr_LeftEdge;
  185.             top    = req->fr_TopEdge;
  186.             width  = req->fr_Width;
  187.             height = req->fr_Height;
  188.         }
  189.         MUI_FreeAslRequest(req);
  190.         set(app,MUIA_Application_Sleep,FALSE);
  191.     }
  192.     return(res);
  193. }
  194.  
  195. ///
  196.  
  197. extern  struct Library  *SysBase,
  198.             *IntuitionBase,
  199.             *UtilityBase,
  200.             *GfxBase,
  201.             *DOSBase,
  202.             *IconBase;
  203.     struct Library  *MUIMasterBase,
  204.             *LocaleBase;
  205.     struct tm_data  *maindata;
  206.     struct Catalog  *Catalog;
  207.  
  208. /*************************************************************************************************/
  209. /* locale stuff                                                                                  */
  210. /*************************************************************************************************/
  211. ///
  212. char *GetStr(int num)
  213. {
  214.     struct AppString *as = (struct AppString *)AppStrings;
  215.     while (as->as_ID != num) as++;
  216.     if (LocaleBase && Catalog) return(GetCatalogStr(Catalog,num,as->as_Str));
  217.     return((char *)as->as_Str);
  218. }
  219.  
  220. VOID LocalizeStringArray(char **array)
  221. {
  222.     char **x;
  223.     for (x=array;*x;x++) *x = GetStr((int)*x);
  224. }
  225.  
  226. VOID LocalizeNewMenu(struct NewMenu *nm)
  227. {
  228.     for (;nm->nm_Type!=NM_END;nm++) if (nm->nm_Label != NM_BARLABEL) nm->nm_Label = GetStr((int)nm->nm_Label);
  229. }
  230.  
  231. VOID InitLocale(VOID)
  232. {
  233.     if (LocaleBase = OpenLibrary("locale.library",38L)) Catalog = (struct Catalog *)OpenCatalog(NULL,"TinyMeterPrefs.catalog",TAG_DONE);
  234. }
  235.  
  236. VOID ExitLocale(VOID)
  237. {
  238.     if (Catalog)    { CloseCatalog(Catalog);    Catalog   =NULL; }
  239.     if (LocaleBase) { CloseLibrary(LocaleBase); LocaleBase=NULL; }
  240. }
  241.  
  242. Object *MakePen()
  243. {
  244.     return(MUI_NewObject(MUIC_Poppen, MUIA_CycleChain, 1, MUIA_Window_Title, GetStr(MO_MakePen), MUIA_Weight, 0, TAG_DONE));
  245. }
  246.  
  247. ///
  248.  
  249. /*************************************************/
  250. /* some pics                                     */
  251. /*************************************************/
  252.  
  253. #include "about.c"
  254. #include "header_logo.c"
  255. #include "question.c"
  256. #include "logo.c"
  257.  
  258. /*************************************************/
  259. /* default settings                              */
  260. /*************************************************/
  261. ///
  262. struct tm_sys_set default_set=
  263. {
  264.     "TM40",
  265.     1,
  266.  
  267.     10,
  268.     10,
  269.     400,
  270.     2,
  271.  
  272.     "Workbench",
  273.  
  274.     "XHelvetica.font",
  275.     11,
  276.  
  277.     bg_file,
  278.     "hd0:prefs/patterns/leather",
  279.     -3,
  280.     FALSE,0x55555555,0x55555555,0x55555555,
  281.  
  282.     5,
  283.     1,
  284.  
  285.     0,
  286.     TRUE,
  287.  
  288.     win_normal,
  289.     0,
  290.     4,
  291.     4,
  292.     8,
  293.     8,
  294.  
  295.     bd_standard,
  296.     FALSE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,
  297.     FALSE,0x0,0x0,0x0,
  298.  
  299.     idle_own
  300. };
  301.  
  302. struct tm_gau_set g4=
  303. {
  304.     typ_volume,
  305.     typ_histmeter,
  306.  
  307.     200,
  308.  
  309.     "Quill.font",
  310.     11,
  311.  
  312.     "ChipMem",
  313.     "HD1: %kd kb,%p%% free",
  314.     "HD1:",
  315.     FALSE,
  316.     ind_right,
  317.     TRUE,
  318.     TRUE,
  319.     TRUE,
  320.     TRUE,
  321.     FALSE,
  322.     FALSE,
  323.     TRUE,
  324.  
  325.     TRUE,2,0,0,
  326.     TRUE,2,0,0,
  327.     FALSE,0,0xFFFFFFFF,0,
  328.     FALSE,0,0,0xFFFFFFFF,
  329.     FALSE,0xFFFFFFFF,0,0,
  330.     TRUE,2,0,0,
  331.     TRUE,1,0,0,
  332.     TRUE,1,0,0,
  333.  
  334.     NULL
  335. };
  336.  
  337. struct tm_gau_set g3=
  338. {
  339.     typ_idle,
  340.     typ_histmeter,
  341.  
  342.     200,
  343.  
  344.     "Quill.font",
  345.     11,
  346.  
  347.     "ChipMem",
  348.     "CPU %p%% free",
  349.     "",
  350.     FALSE,
  351.     ind_right,
  352.     TRUE,
  353.     TRUE,
  354.     TRUE,
  355.     TRUE,
  356.     FALSE,
  357.     FALSE,
  358.     TRUE,
  359.  
  360.     TRUE,2,0,0,
  361.     TRUE,2,0,0,
  362.     FALSE,0,0xFFFFFFFF,0,
  363.     FALSE,0,0,0xFFFFFFFF,
  364.     FALSE,0xFFFFFFFF,0,0,
  365.     TRUE,2,0,0,
  366.     TRUE,1,0,0,
  367.     TRUE,1,0,0,
  368.  
  369.     &g4
  370. };
  371.  
  372.  
  373. struct tm_gau_set g2=
  374. {
  375.     typ_fast,
  376.     typ_gauge,
  377.  
  378.     20,
  379.  
  380.     "XHelvetica.font",
  381.     11,
  382.  
  383.     "FastMem",
  384.     "%td Bytes free",
  385.     "",
  386.     FALSE,
  387.     ind_right,
  388.     TRUE,
  389.     TRUE,
  390.     TRUE,
  391.     TRUE,
  392.     FALSE,
  393.     FALSE,
  394.     FALSE,
  395.  
  396.     TRUE,2,0,0,
  397.     TRUE,2,0,0,
  398.     FALSE,0,0xFFFFFFFF,0,
  399.     FALSE,0,0,0xFFFFFFFF,
  400.     FALSE,0xFFFFFFFF,0,0,
  401.     TRUE,2,0,0,
  402.     TRUE,1,0,0,
  403.     TRUE,0,0,0,
  404.  
  405.     &g3,
  406. };
  407.  
  408.  
  409. struct tm_gau_set g1=
  410. {
  411.     typ_chip,
  412.     typ_gauge,
  413.  
  414.     20,
  415.  
  416.     "XHelvetica.font",
  417.     11,
  418.  
  419.     "ChipMem",
  420.     "%td Bytes free",
  421.     "",
  422.     FALSE,
  423.     ind_right,
  424.     TRUE,
  425.     TRUE,
  426.     TRUE,
  427.     TRUE,
  428.     FALSE,
  429.     FALSE,
  430.     FALSE,
  431.  
  432.     TRUE,2,0,0,
  433.     TRUE,2,0,0,
  434.     FALSE,0,0xFFFFFFFF,0,
  435.     FALSE,0,0,0xFFFFFFFF,
  436.     FALSE,0xFFFFFFFF,0,0,
  437.     TRUE,2,0,0,
  438.     TRUE,1,0,0,
  439.     TRUE,0,0,0,
  440.  
  441.     &g2
  442. };
  443.  
  444. struct tm_gau_set  default_gauge=
  445. {
  446.     NULL,
  447.     typ_gauge,
  448.  
  449.     80,
  450.  
  451.     "topaz.font",
  452.     8,
  453.  
  454.     "",
  455.     "",
  456.     "",
  457.     FALSE,
  458.     ind_right,
  459.     TRUE,
  460.     TRUE,
  461.     TRUE,
  462.     TRUE,
  463.     FALSE,
  464.     FALSE,
  465.     TRUE,
  466.  
  467.     TRUE,2,0,0,
  468.     TRUE,2,0,0,
  469.     FALSE,0,0xFFFFFFFF,0,
  470.     FALSE,0,0,0xFFFFFFFF,
  471.     FALSE,0xFFFFFFFF,0,0,
  472.     TRUE,2,0,0,
  473.     TRUE,1,0,0,
  474.     TRUE,0,0,0,
  475.  
  476.     NULL
  477. };
  478.  
  479. struct tm_gau_set  default_launcher=
  480. {
  481.     NULL,
  482.     typ_gauge,
  483.  
  484.     80,
  485.  
  486.     "topaz.font",
  487.     8,
  488.  
  489.     "",
  490.     "",
  491.     "",
  492.     FALSE,
  493.     ind_right,
  494.     TRUE,
  495.     TRUE,
  496.     TRUE,
  497.     TRUE,
  498.     FALSE,
  499.     FALSE,
  500.     TRUE,
  501.  
  502.     TRUE,1,0,0,
  503.     TRUE,1,0,0,
  504.     FALSE,0,0xFFFFFFFF,0,
  505.     TRUE,1,0,0,
  506.     TRUE,3,0,0,
  507.     TRUE,2,0,0,
  508.     TRUE,1,0,0,
  509.     TRUE,0,0,0,
  510.  
  511.     NULL
  512. };
  513.  
  514. ///
  515. /*************************************************/
  516. /* Drag & Drop lists                             */
  517. /*************************************************/
  518.  
  519. /******************************************/
  520. /* some hooks                             */
  521. /******************************************/
  522. ///
  523. char *gau_types[]=
  524. {
  525.     (STRPTR)MDL_typ_space,
  526.     (STRPTR)MDL_typ_total,
  527.     (STRPTR)MDL_typ_chip,
  528.     (STRPTR)MDL_typ_fast,
  529.     (STRPTR)MDL_typ_volume,
  530.     (STRPTR)MDL_typ_cpu,
  531.     (STRPTR)MDL_typ_retina,
  532.     (STRPTR)MDL_typ_largest_chip,
  533.     (STRPTR)MDL_typ_largest_fast,
  534.     (STRPTR)MDL_typ_largest_total,
  535.     (STRPTR)MDL_typ_largest_retina,
  536.     (STRPTR)MDL_typ_clock,
  537.     (STRPTR)MDL_typ_simplelauncher,
  538.     0L,
  539. };
  540.  
  541. __geta4 ULONG gau_consfunc(__a1 struct tm_gau_set *src)
  542. {
  543.     return(src);
  544. }
  545.  
  546. __geta4 void gau_desfunc(__a1 struct tm_gau_set *src)
  547. {
  548.     FreeVec(src);
  549. }
  550.  
  551. __geta4 ULONG gau_dispfunc(__a2 char **array,__a1 struct tm_gau_set *src)
  552. {
  553.     if(src->type!=0)
  554.     {
  555.     *array++ = gau_types[src->type];
  556.     if(src->type==typ_volume)
  557.     {
  558.         *array   = &src->expansion[0];
  559.     }
  560.     else *array = "";
  561.     }
  562.     else
  563.     {
  564.     *array++ = "-----------------";
  565.     *array   = "";
  566.     }
  567.     return(0L);
  568. }
  569.  
  570. static const struct Hook gau_ConstructHook = { { 0,0 }, (void *)gau_consfunc, NULL, NULL };
  571. static const struct Hook gau_DestructHook  = { { 0,0 }, (void *)gau_desfunc , NULL, NULL };
  572. static const struct Hook gau_DisplayHook   = { { 0,0 }, (void *)gau_dispfunc, NULL, NULL };
  573. ///
  574. /******************************************/
  575. /* FieldsList class                       */
  576. /******************************************/
  577. ///
  578. struct FieldsList_Data
  579. {
  580.     LONG dummy;
  581. };
  582.  
  583.  
  584. ULONG FieldsList_DragQuery(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
  585. {
  586.     if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
  587.     else if (msg->obj==(Object *)muiUserData(obj)) return(MUIV_DragQuery_Accept);
  588.     else return(MUIV_DragQuery_Refuse);
  589. }
  590.  
  591.  
  592. ULONG FieldsList_DragDrop(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
  593. {
  594.     if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
  595.     else
  596.     {
  597.     struct tm_gau_set   *entry;
  598.     LONG                dropmark;
  599.     LONG                sortable;
  600.     LONG                active;
  601.  
  602.     get(obj,MUIA_List_DragSortable,&sortable);
  603.     if (sortable)
  604.     {
  605.         get(msg->obj,MUIA_List_Active,&active);
  606.         if(entry=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),MEMF_CLEAR))
  607.         {
  608.         if(active==typ_simplelauncher)
  609.         {
  610.             CopyMem(&default_launcher,entry, sizeof(struct tm_gau_set));
  611.             strcpy(&entry->expansion[0],"Provide a filename!");
  612.         }
  613.         else
  614.         {
  615.             CopyMem(&default_gauge,entry, sizeof(struct tm_gau_set));
  616.         }
  617.         entry->type = (UWORD)active;
  618.         if(active==typ_clock_) entry->gauge_type=typ_clock;
  619.  
  620.         get     (obj,       MUIA_List_DropMark,     &dropmark);
  621.         DoMethod(obj,       MUIM_List_InsertSingle, entry,dropmark);
  622.         set     (obj,       MUIA_List_Active,       dropmark);
  623.         set     (msg->obj,  MUIA_List_Active,       MUIV_List_Active_Off);
  624.         }
  625.     }
  626.     else
  627.     {
  628.         DoMethod(msg->obj,MUIM_List_Remove,MUIV_List_Remove_Active);
  629.     }
  630.     return(obj);
  631.     }
  632. }
  633.  
  634.  
  635. __geta4 ULONG FieldsList_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  636. {
  637.     switch (msg->MethodID)
  638.     {
  639.     case MUIM_DragQuery: return(FieldsList_DragQuery(cl,obj,(APTR)msg));
  640.     case MUIM_DragDrop : return(FieldsList_DragDrop (cl,obj,(APTR)msg));
  641.     }
  642.     return(DoSuperMethodA(cl,obj,msg));
  643. }
  644. ///
  645. /******************************************/
  646. /* ChooseFields class                     */
  647. /******************************************/
  648. ///
  649. Object *available, *visible;
  650.  
  651. struct ChooseFields_Data
  652. {
  653.     ULONG dummy;
  654. };
  655.  
  656. struct ComposerMsg
  657. {
  658.     ULONG   MethodID;
  659.     Object  *listview;
  660.     struct ChooseFields_Data *data;
  661. };
  662.  
  663. #define Dis_ID_DoubleClickComposer      1
  664. #define Dis_ID_ComposerClose            2
  665. #define Dis_ID_ComposerSave             3
  666. #define Dis_ID_LauncherClose            4
  667. #define Dis_ID_LauncherSave             5
  668. #define Dis_ID_CloneEntry               6
  669.  
  670. #define Originator             ( TAG_USER + 1 )
  671. #define Gauge_Settings         ( TAG_USER + 2 )
  672.  
  673. static ULONG DoubleClickComposer(struct IClass *cl,Object *obj, struct ComposerMsg *msg)
  674. {
  675.     struct tm_gau_set   *desc;
  676.     Object *tmp;
  677.  
  678.     DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
  679.  
  680.     if (desc)
  681.     {
  682.     set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,TRUE);
  683.     switch (desc->type)
  684.     {
  685.         case    typ_none:
  686.             break;
  687.         case    typ_simplelauncher:
  688.             if (tmp = (APTR)NewObject(CL_Launcher->mcc_Class,NULL,
  689.             Originator, obj,
  690.             Gauge_Settings,      desc,
  691.             TAG_DONE))
  692.             {
  693.             DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp);
  694.             set(tmp,MUIA_Window_Open,TRUE);
  695.             }
  696.             break;
  697.         default:
  698.             if (tmp = (APTR)NewObject(CL_Composer->mcc_Class,NULL,
  699.             Originator, obj,
  700.             Gauge_Settings,      desc,
  701.             TAG_DONE))
  702.             {
  703.             DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp);
  704.             set(tmp,MUIA_Window_Open,TRUE);
  705.             }
  706.             else DisplayBeep(0);
  707.             break;
  708.  
  709.     }
  710.     set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,FALSE);
  711.     }
  712.     return((ULONG)0);
  713. }
  714.  
  715. static ULONG Clone_Entry(struct IClass *cl,Object *obj, struct ComposerMsg *msg)
  716. {
  717.     struct tm_gau_set *desc,*news;
  718.     DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
  719.     if (desc)
  720.     {
  721.     if(news=AllocVec(sizeof(struct tm_gau_set),0L))
  722.     {
  723.         CopyMem(desc,news,sizeof(struct tm_gau_set));
  724.         DoMethod(msg->listview,MUIM_List_InsertSingle,news,MUIV_List_Insert_Active);
  725.     }
  726.     }
  727. }
  728.  
  729. static ULONG ChooseFields_New(struct IClass *cl,Object *obj,struct opSet *msg)
  730. {
  731.     Object  *BT_Clone;
  732.     obj = (Object *)DoSuperNew(cl,obj,
  733.     MUIA_Group_Columns, 2,
  734.     MUIA_Group_VertSpacing, 1,
  735.     Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Available), End,
  736.     Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Selected ), End,
  737.     Child, ListviewObject,
  738.         MUIA_Listview_DragType, 1,
  739.         MUIA_Listview_List, available = NewObject(CL_FieldsList->mcc_Class,NULL,
  740.         InputListFrame,
  741.         MUIA_List_SourceArray  , gau_types,
  742.         MUIA_List_ShowDropMarks, FALSE,
  743.         TAG_DONE),
  744.     End,
  745.     Child,VGroup,
  746.         Child, ListviewObject,
  747.         MUIA_Listview_DragType, 1,
  748.         MUIA_Listview_DoubleClick,  TRUE,
  749.         MUIA_Listview_List, visible = NewObject(CL_FieldsList->mcc_Class,NULL,
  750.             InputListFrame,
  751.             MUIA_List_ConstructHook, &gau_ConstructHook,
  752.             MUIA_List_DestructHook , &gau_DestructHook,
  753.             MUIA_List_DisplayHook  , &gau_DisplayHook,
  754.             MUIA_List_Format       , "MIW=50 MAW=100 BAR,",
  755.             MUIA_List_DragSortable , TRUE,
  756.             TAG_DONE),
  757.         End,
  758.         Child, BT_Clone=SimpleButton(GetStr(MCO_Clone)),
  759.     End,
  760.     End;
  761.  
  762.     if (obj)
  763.     {
  764.     DoMethod(visible, MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,obj,2,Dis_ID_DoubleClickComposer,visible);
  765.     DoMethod(BT_Clone,MUIM_Notify,MUIA_Pressed,TRUE,             obj,2,Dis_ID_CloneEntry         ,visible);
  766.  
  767.     set(available,MUIA_UserData,visible);
  768.     set(visible,MUIA_UserData,available);
  769.  
  770.     set(available,MUIA_ShortHelp,GetStr(MDH_Available));
  771.     set(visible,MUIA_ShortHelp,GetStr(MDH_Selected));
  772.     }
  773.  
  774.     return((ULONG)obj);
  775. }
  776.  
  777. ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg);
  778. ULONG Launcher_Close(struct IClass *cl, Object *obj, struct LauncherFinishMsg *msg);
  779.  
  780. static __saveds __asm ULONG ChooseFields_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  781. {
  782.     switch (msg->MethodID)
  783.     {
  784.     case OM_NEW                     : return(ChooseFields_New       (cl,obj,(APTR)msg));
  785.     case Dis_ID_DoubleClickComposer : return(DoubleClickComposer    (cl,obj,(APTR)msg));
  786.     case Dis_ID_ComposerClose       : return(Composer_Close         (cl,obj,(APTR)msg));
  787.     case Dis_ID_LauncherClose       : return(Launcher_Close         (cl,obj,(APTR)msg));
  788.     case Dis_ID_CloneEntry          : return(Clone_Entry            (cl,obj,(APTR)msg));
  789.     }
  790.     return(DoSuperMethodA(cl,obj,msg));
  791. }
  792. ///
  793. /*************************************************/
  794. /* Composer Class                                */
  795. /*************************************************/
  796.  
  797. /******************************************/
  798. /* Composer Menu                          */
  799. /******************************************/
  800. ///
  801.  
  802. struct NewMenu CmpMenuData[] =
  803. {
  804.     { NM_TITLE, (STRPTR)MCM_Gauge          , 0 ,0 ,0             ,(APTR)CMP_PROJECT  },
  805.     { NM_ITEM , (STRPTR)MCM_Open           ,"O",0 ,0             ,(APTR)CMP_LOAD     },
  806.     { NM_ITEM , (STRPTR)MCM_SaveAs         ,"S",0 ,0             ,(APTR)CMP_SAVE     },
  807.     { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  808.     { NM_ITEM , (STRPTR)MCM_Cancel         ,"C",0 ,0             ,(APTR)CMP_CANCEL   },
  809.     { NM_END,NULL,0,0,0,(APTR)0 }
  810. };
  811. ///
  812. /******************************************/
  813. /* Composer class                         */
  814. /******************************************/
  815. ///
  816.  
  817. #define Dis_ID_DoubleClickDevice    8
  818. #define Dis_ID_SaveGauge            9
  819. #define Dis_ID_LoadGauge            10
  820. #define Dis_ID_ShowFormatHelp       11
  821.  
  822. struct Composer_Data
  823. {
  824.     Object              *ST_Label,
  825.             *PO_Device,
  826.             *ST_Device,
  827.             *CY_Type,
  828.             *NB_Height,
  829.             *CS_Colors[16],
  830.             *ST_Font,
  831.             *ST_Format,
  832.             *CM_3D,
  833.             *CM_Border,
  834.             *CM_Bg,
  835.             *CM_Shadow,
  836.             *CM_NoGauge,
  837.             *CM_NoFmt,
  838.             *CM_NoBase,
  839.             *CY_Indent,
  840.             *LV_Device,
  841.             *VL_Device,
  842.             *originator,
  843.             *sub_win,
  844.             *BT_Use,
  845.             *BT_Cancel,
  846.             *PO_Device,
  847.             *CMP_Menu,
  848.             *BT_Quest;
  849.     struct tm_gau_set   *gauge;
  850. };
  851.  
  852. static ULONG DoubleClickDev(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  853. {
  854.     char   *my_ptr;
  855.     struct Composer_Data    *data = INST_DATA(cl,obj);
  856.  
  857.     DoMethod(data->VL_Device,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
  858.     if(my_ptr)
  859.     {
  860.     set(data->ST_Device,MUIA_String_Contents,my_ptr);
  861.     DoMethod(data->PO_Device,MUIM_Popstring_Close,0L);
  862.     return(DoSuperMethodA(cl,obj,msg));
  863.     }
  864.     else return(0L);
  865. }
  866.  
  867. struct ComposerFinishMsg
  868. {
  869.     ULONG   MethodID;
  870.     Object  *win;
  871.     ULONG   ok;
  872. };
  873.  
  874. ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
  875. {
  876.     if(msg->ok)
  877.     {
  878.     DoMethod(msg->win,Dis_ID_ComposerSave,msg->win,TRUE);
  879.     }
  880.     set(msg->win,MUIA_Window_Open,FALSE);
  881.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
  882.  
  883.     MUI_DisposeObject(msg->win);
  884.  
  885.     return((ULONG)0L);
  886. }
  887.  
  888. ULONG Composer_Save(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
  889. {
  890.     int     i;
  891.     ULONG   dummy;
  892.     struct  Composer_Data    *data   = INST_DATA(cl,obj);
  893.     for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]);
  894.     get(data->ST_Label  ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->label[0]    , dummy ? (char *)dummy : " " );
  895.     get(data->ST_Device ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->expansion[0], dummy ? (char *)dummy : " " );
  896.     get(data->CY_Type   ,MUIA_Cycle_Active   ,&dummy); data->gauge->gauge_type  =(UWORD)dummy;
  897.     get(data->NB_Height ,MUIA_Numeric_Value  ,&dummy); data->gauge->size_y      =(UWORD)dummy-100;
  898.     get(data->CM_3D     ,MUIA_Selected       ,&dummy); data->gauge->sty_3d      =(UWORD)dummy;
  899.     get(data->CM_Border ,MUIA_Selected       ,&dummy); data->gauge->sty_border  =(UWORD)dummy;
  900.     get(data->CM_Bg     ,MUIA_Selected       ,&dummy); data->gauge->sty_bg      =(UWORD)dummy;
  901.     get(data->CM_Shadow ,MUIA_Selected       ,&dummy); data->gauge->sty_shadow  =(UWORD)dummy;
  902.     get(data->CM_NoGauge,MUIA_Selected       ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy;
  903.     get(data->CM_NoFmt  ,MUIA_Selected       ,&dummy); data->gauge->sty_noformat=(UWORD)dummy;
  904.     get(data->CM_NoBase ,MUIA_Selected       ,&dummy); data->gauge->sty_nobase  =(UWORD)dummy;
  905.     get(data->CY_Indent ,MUIA_Cycle_Active   ,&dummy); data->gauge->indent      =(UWORD)dummy;
  906.     get(data->ST_Font   ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i);
  907.     strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i;
  908.     get(data->ST_Format ,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->format[0], dummy ? (char *)dummy : " " );
  909.     DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
  910. }
  911.  
  912. char   *types[]         ={(STRPTR)MCL_Normal,(STRPTR)MCL_Historymeter,0L};
  913.  
  914. char   *indent[]        ={(STRPTR)MCL_center,(STRPTR)MCL_left,(STRPTR)MCL_right,0L};
  915.  
  916. char   *regcomposer[]   ={(STRPTR)MCR_general,(STRPTR)MCR_flags,(STRPTR)MCR_colors,0L};
  917.  
  918. insertComposerSettings(struct tm_gau_set *gauge, struct Composer_Data *data)
  919. {
  920.     int     i;
  921.     char    dummy[256];
  922.  
  923.     for(i=0;i<8;i++)
  924.     {
  925.     initColor(&gauge->Colors[i],data->CS_Colors[i]);
  926.     if(gauge->type == typ_clock_) set(data->CS_Colors[i],MUIA_Disabled,TRUE);
  927.     }
  928.     set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100);
  929.     if(gauge->type != typ_volume) set(data->PO_Device, MUIA_Disabled,TRUE);
  930.     if((gauge->gauge_type==typ_histmeter)||(gauge->type==typ_clock_))
  931.     {
  932.     set(data->ST_Label,  MUIA_Disabled,TRUE);
  933.     set(data->CM_3D,     MUIA_Disabled,TRUE);
  934.     set(data->CM_Shadow, MUIA_Disabled,TRUE);
  935.     if(gauge->type==typ_clock_)
  936.     {
  937.         set(data->CM_Bg,     MUIA_Disabled,TRUE);
  938.         set(data->CS_Colors[col_format] ,MUIA_Disabled,FALSE);
  939.         set(data->CS_Colors[col_dark]   ,MUIA_Disabled,FALSE);
  940.         set(data->CM_Shadow     ,MUIA_Disabled,FALSE);
  941.         set(data->CM_Border     ,MUIA_Disabled,TRUE);
  942.         set(data->CM_NoGauge    ,MUIA_Disabled,TRUE);
  943.         set(data->CM_NoFmt      ,MUIA_Disabled,TRUE);
  944.         set(data->CM_NoBase     ,MUIA_Disabled,TRUE);
  945.         set(data->CY_Type       ,MUIA_Disabled,TRUE);
  946.     }
  947.     }
  948.  
  949.     set(data->CM_3D     ,MUIA_Selected,gauge->sty_3d);
  950.     set(data->CM_Border ,MUIA_Selected,gauge->sty_border);
  951.     set(data->CM_Bg     ,MUIA_Selected,gauge->sty_bg);
  952.     set(data->CM_Shadow ,MUIA_Selected,gauge->sty_shadow);
  953.     set(data->CM_NoGauge,MUIA_Selected,gauge->sty_nogauge);
  954.     set(data->CM_NoFmt  ,MUIA_Selected,gauge->sty_noformat);
  955.     set(data->CM_NoBase ,MUIA_Selected,gauge->sty_nobase);
  956.  
  957.     set(data->ST_Format ,MUIA_String_Contents,&gauge->format[0]);
  958.  
  959.     strcpy(&dummy[0],gauge->font);
  960.     sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size);
  961.  
  962.     set(data->ST_Font   ,MUIA_String_Contents,&dummy[0]);
  963.     set(data->ST_Device ,MUIA_String_Contents,&gauge->expansion[0]);
  964.     set(data->ST_Label  ,MUIA_String_Contents,&gauge->label[0]);
  965.  
  966.     set(data->CY_Indent ,MUIA_Cycle_Active,gauge->indent);
  967.     set(data->CY_Type   ,MUIA_Cycle_Active,gauge->gauge_type);
  968. }
  969.  
  970. LoadGaugeSet(struct IClass *cl,Object *obj)
  971. {
  972.     struct Composer_Data    *data=INST_DATA(cl,obj);
  973.     char                    *file;
  974.     ULONG                   my_file;
  975.     ULONG                   buf;
  976.     UWORD                   old_type;
  977.     char                    old_expansion[128];
  978.  
  979.     if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE))
  980.     {
  981.     if(my_file=(ULONG)Open(file,MODE_OLDFILE))
  982.     {
  983.         Read(my_file,&buf,4L);
  984.         if(buf==0x544D4731)
  985.         {
  986.         old_type=data->gauge->type;
  987.         CopyMem(&data->gauge->expansion[0],&old_expansion[0],128L);
  988.         Read(my_file,data->gauge,sizeof(struct tm_gau_set));
  989.         data->gauge->type=old_type;
  990.         CopyMem(&old_expansion[0],&data->gauge->expansion[0],128L);
  991.         insertComposerSettings(data->gauge,data);
  992.         }
  993.         else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL);
  994.         Close(my_file);
  995.     }
  996.     }
  997. }
  998.  
  999. SaveGaugeSet(struct IClass *cl,Object *obj)
  1000. {
  1001.     struct Composer_Data        *data=INST_DATA(cl,obj);
  1002.     char                        *file;
  1003.     ULONG                       buf,my_file;
  1004.     struct ComposerFinishMsg    msg;
  1005.  
  1006.     msg.ok=TRUE;
  1007.  
  1008.     Composer_Save( cl,obj,&msg);
  1009.  
  1010.     buf=0x544D4731;
  1011.  
  1012.     if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE))
  1013.     {
  1014.     if(my_file=Open(file,MODE_NEWFILE))
  1015.     {
  1016.         Write(my_file,&buf,4L);
  1017.         Write(my_file,data->gauge,sizeof(struct tm_gau_set));
  1018.         Close(my_file);
  1019.     }
  1020.     }
  1021. }
  1022.  
  1023. Object  *WI_HelpFmt,
  1024.     *WI_HelpClock;
  1025.  
  1026. static ULONG Composer_New(struct IClass *cl,Object *obj,struct opSet *msg)
  1027. {
  1028.     struct Composer_Data    *data,*new_data;
  1029.  
  1030.     if(new_data=AllocVec(sizeof(struct Composer_Data),0L))
  1031.     {
  1032.     if(new_data->gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList))
  1033.     {
  1034.         if( obj = (Object *)DoSuperNew(cl,obj,
  1035.             MUIA_Window_Title       , gau_types[new_data->gauge->type] ,
  1036.             MUIA_Window_ID          , MAKE_ID('T','M','C','O'),
  1037.             MUIA_Window_Menustrip   , new_data->CMP_Menu = MUI_MakeObject(MUIO_MenustripNM,CmpMenuData,0),
  1038.             WindowContents, VGroup, ButtonFrame,
  1039.  
  1040.             Child, HGroup,
  1041.                 Child, VGroup, MUIA_Background, MUII_SHADOW,
  1042.                 Child, VSpace(0),
  1043.                 Child, BodychunkObject,
  1044.                     MUIA_FixWidth             , HEADER_LOGO_WIDTH ,
  1045.                     MUIA_FixHeight            , HEADER_LOGO_HEIGHT,
  1046.                     MUIA_Bitmap_Width         , HEADER_LOGO_WIDTH ,
  1047.                     MUIA_Bitmap_Height        , HEADER_LOGO_HEIGHT,
  1048.                     MUIA_Bodychunk_Depth      , HEADER_LOGO_DEPTH ,
  1049.                     MUIA_Bodychunk_Body       , (UBYTE *)header_logo_body,
  1050.                     MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION,
  1051.                     MUIA_Bodychunk_Masking    , HEADER_LOGO_MASKING,
  1052.                     MUIA_Bitmap_SourceColors  , (ULONG *)header_logo_colors,
  1053.                     MUIA_Bitmap_Transparent   , 0,
  1054.                 End,
  1055.                 End,
  1056.  
  1057.                 Child, RegisterGroup(regcomposer),
  1058.                 MUIA_Register_Frame, TRUE,
  1059.  
  1060.                 Child, ColGroup(2),
  1061.                     Child, VSpace(0),
  1062.                     Child, VSpace(0),
  1063.                     Child, Label(GetStr(MCO_type)),
  1064.                     Child,  new_data->CY_Type=CycleObject,
  1065.                     MUIA_Cycle_Entries, types,
  1066.                     End,
  1067.                     Child, Label(GetStr(MCO_label)),
  1068.                     Child, new_data->ST_Label=String(0L,16),
  1069.                     Child, Label(GetStr(MCO_height)),
  1070.                     Child, ColGroup(2), Child, new_data->NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,1000,GetStr(MCO_height_fmt)), Child, HVSpace, End,
  1071.                     Child, Label(GetStr(MCO_font)),
  1072.                     Child,  PopaslObject,
  1073.                     MUIA_Popstring_String, new_data->ST_Font=(Object *)String(0L,80),
  1074.                     MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1075.                     MUIA_Popasl_Type , ASL_FontRequest,
  1076.                     ASLFO_TitleText  , GetStr(MCO_sel_font),
  1077.                     End,
  1078.                     Child, Label(GetStr(MCO_device)),
  1079.                     Child, new_data->PO_Device=PopobjectObject,
  1080.                     MUIA_Popstring_String, new_data->ST_Device=String(0L,128),
  1081.                     MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1082.                     MUIA_Popobject_Object, new_data->LV_Device=ListviewObject,
  1083.                         MUIA_Weight, 20,
  1084.                         MUIA_Listview_Input, TRUE,
  1085.                         MUIA_Listview_DoubleClick, TRUE,
  1086.                         MUIA_Listview_List, new_data->VL_Device=VolumelistObject,
  1087.                         InputListFrame,
  1088.                         MUIA_Dirlist_Directory, "ram:",
  1089.                         End,
  1090.                     End,
  1091.                     End,
  1092.                     Child, VSpace(0),
  1093.                     Child, VSpace(0),
  1094.                 End,
  1095.                 Child, ColGroup(2),
  1096.                     Child, VSpace(0),
  1097.                     Child, VSpace(0),
  1098.                     Child, Label(GetStr(MCO_3dlook)),
  1099.                     Child, new_data->CM_3D=CheckMark(new_data->gauge->sty_3d),
  1100.                     Child, Label(GetStr(MCO_border)),
  1101.                     Child, new_data->CM_Border=CheckMark(new_data->gauge->sty_border),
  1102.                     Child, Label(GetStr(MCO_nobgcol)),
  1103.                     Child, new_data->CM_Bg=CheckMark(new_data->gauge->sty_bg),
  1104.                     Child, Label(GetStr(MCO_shadow)),
  1105.                     Child, new_data->CM_Shadow=CheckMark(new_data->gauge->sty_shadow),
  1106.                     Child, Label(GetStr(MCO_disgaug)),
  1107.                     Child, new_data->CM_NoGauge=CheckMark(new_data->gauge->sty_nogauge),
  1108.                     Child, Label(GetStr(MCO_disfmt)),
  1109.                     Child, new_data->CM_NoFmt=CheckMark(new_data->gauge->sty_noformat),
  1110.                     Child, Label(GetStr(MCO_disbas)),
  1111.                     Child, new_data->CM_NoBase=CheckMark(new_data->gauge->sty_nobase),
  1112.                     Child, VSpace(0),
  1113.                     Child, VSpace(0),
  1114.                 End,
  1115.                 Child, ColGroup(2),
  1116.                     Child, ColGroup(2),
  1117.                     Child, VSpace(0),
  1118.                     Child, VSpace(0),
  1119.                     Child, Label(GetStr(MCO_col_label)),
  1120.                     Child, new_data->CS_Colors[col_label]     =MakePen(),
  1121.                     Child, Label(GetStr(MCO_col_fmt)),
  1122.                     Child, new_data->CS_Colors[col_format]    =MakePen(),
  1123.                     Child, Label(GetStr(MCO_col_bas)),
  1124.                     Child, new_data->CS_Colors[col_base]      =MakePen(),
  1125.                     Child, Label(GetStr(MCO_col_cur)),
  1126.                     Child, new_data->CS_Colors[col_current]   =MakePen(),
  1127.                     Child, VSpace(0),
  1128.                     Child, VSpace(0),
  1129.                     End,
  1130.                     Child, ColGroup(2),
  1131.                     Child, VSpace(0),
  1132.                     Child, VSpace(0),
  1133.                     Child, Label(GetStr(MCO_col_neg)),
  1134.                     Child, new_data->CS_Colors[col_negative]  =MakePen(),
  1135.                     Child, Label(GetStr(MCO_col_bright)),
  1136.                     Child, new_data->CS_Colors[col_bright]    =MakePen(),
  1137.                     Child, Label(GetStr(MCO_col_dark)),
  1138.                     Child, new_data->CS_Colors[col_dark]      =MakePen(),
  1139.                     Child, Label(GetStr(MCO_col_bg)),
  1140.                     Child, new_data->CS_Colors[col_bg]        =MakePen(),
  1141.                     Child, VSpace(0),
  1142.                     Child, VSpace(0),
  1143.                     End,
  1144.                 End,
  1145.                 End,
  1146.             End,
  1147.             Child, HGroup, GroupFrameT(GetStr(MCO_fmt)),
  1148.                 Child, new_data->ST_Format=(Object *)String(0L,128),
  1149.                 Child, new_data->BT_Quest=BodychunkObject,
  1150.                 ButtonFrame,
  1151.                 MUIA_InputMode            , MUIV_InputMode_RelVerify,
  1152.                 MUIA_FixWidth             , QUESTION_WIDTH ,
  1153.                 MUIA_FixHeight            , QUESTION_HEIGHT,
  1154.                 MUIA_Bitmap_Width         , QUESTION_WIDTH ,
  1155.                 MUIA_Bitmap_Height        , QUESTION_HEIGHT,
  1156.                 MUIA_Bodychunk_Depth      , QUESTION_DEPTH ,
  1157.                 MUIA_Bodychunk_Body       , (UBYTE *)question_body,
  1158.                 MUIA_Bodychunk_Compression, QUESTION_COMPRESSION,
  1159.                 MUIA_Bodychunk_Masking    , QUESTION_MASKING,
  1160.                 MUIA_Bitmap_SourceColors  , (ULONG *)question_colors,
  1161.                 MUIA_Bitmap_Transparent   , 0,
  1162.                 End,
  1163.                 Child,  new_data->CY_Indent=CycleObject,
  1164.                 MUIA_Weight, 0,
  1165.                 MUIA_Cycle_Entries, indent,
  1166.                 End,
  1167.             End,
  1168.             Child, HGroup,
  1169.                 Child, new_data->BT_Use = (Object *)SimpleButton(GetStr(MCO_Use)),
  1170.                 Child, new_data->BT_Cancel = (Object *)SimpleButton(GetStr(MCO_Cancel)),
  1171.             End,
  1172.             End,
  1173.         End)
  1174.         {
  1175.         data=INST_DATA(cl,obj);
  1176.         CopyMem(new_data,data,sizeof(struct Composer_Data));
  1177.         FreeVec(new_data);
  1178.         set(data->ST_Label,MUIA_ShortHelp,GetStr(MOH_Label));
  1179.         set(data->PO_Device,MUIA_ShortHelp,GetStr(MOH_Device));
  1180.         set(data->CM_Border,MUIA_ShortHelp,GetStr(MOH_3d));
  1181.         set(data->CM_Bg,MUIA_ShortHelp,GetStr(MOH_Bg));
  1182.         set(data->CM_NoGauge,MUIA_ShortHelp,GetStr(MOH_NoGauge));
  1183.         set(data->CM_NoFmt,MUIA_ShortHelp,GetStr(MOH_NoFmt));
  1184.         set(data->CM_NoBase,MUIA_ShortHelp,GetStr(MOH_NoBase));
  1185.         insertComposerSettings(data->gauge,data);
  1186.         data->originator = (Object *)GetTagData(Originator,0,msg->ops_AttrList);
  1187.         DoMethod(data->LV_Device, MUIM_Notify,MUIA_Listview_DoubleClick      ,TRUE,obj,1,Dis_ID_DoubleClickDevice);
  1188.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,data->ST_Label,3,MUIM_Set,MUIA_Disabled,FALSE);
  1189.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->ST_Label,3,MUIM_Set,MUIA_Disabled,TRUE);
  1190.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,data->CM_3D,3,MUIM_Set,MUIA_Disabled,FALSE);
  1191.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_3D,3,MUIM_Set,MUIA_Disabled,TRUE);
  1192.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,data->CM_Shadow,3,MUIM_Set,MUIA_Disabled,FALSE);
  1193.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_Shadow,3,MUIM_Set,MUIA_Disabled,TRUE);
  1194.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,data->CM_Bg,3,MUIM_Set,MUIA_Disabled,FALSE);
  1195.         DoMethod(data->CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_Bg,3,MUIM_Set,MUIA_Disabled,TRUE);
  1196.         if(data->gauge->type!=typ_clock_) DoMethod(data->BT_Quest,  MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpFmt   ,3,MUIM_Set,MUIA_Window_Open,TRUE);
  1197.         else                              DoMethod(data->BT_Quest,  MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpClock ,3,MUIM_Set,MUIA_Window_Open,TRUE);
  1198.         DoMethod(obj,             MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
  1199.         DoMethod(data->BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
  1200.         DoMethod(data->BT_Use,    MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,TRUE);
  1201.         DoMethod(obj,       MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveGauge);
  1202.         DoMethod(obj,       MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadGauge);
  1203.         return((ULONG)obj);
  1204.         }
  1205.     }
  1206.     }
  1207.     return(0L);
  1208. }
  1209.  
  1210. static __saveds __asm ULONG ComposerDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  1211. {
  1212.     switch (msg->MethodID)
  1213.     {
  1214.     case OM_NEW                     : return(Composer_New   (cl,obj,(APTR)msg));
  1215.     case Dis_ID_ComposerSave        : return(Composer_Save  (cl,obj,(APTR)msg));
  1216.     case Dis_ID_DoubleClickDevice   : return(DoubleClickDev (cl,obj,(APTR)msg));
  1217.     case Dis_ID_SaveGauge           : return(SaveGaugeSet   (cl,obj));
  1218.     case Dis_ID_LoadGauge           : return(LoadGaugeSet   (cl,obj));
  1219.     }
  1220.     return(DoSuperMethodA(cl,obj,msg));
  1221. }
  1222. ///
  1223. /*************************************************/
  1224. /* Launcher Class                                */
  1225. /*************************************************/
  1226.  
  1227. /******************************************/
  1228. /* Launcher Menu                          */
  1229. /******************************************/
  1230. ///
  1231.  
  1232. struct NewMenu LauMenuData[] =
  1233. {
  1234.     { NM_TITLE, (STRPTR)MCM_Gauge          , 0 ,0 ,0             ,(APTR)CMP_PROJECT  },
  1235.     { NM_ITEM , (STRPTR)MCM_Open           ,"O",0 ,0             ,(APTR)CMP_LOAD     },
  1236.     { NM_ITEM , (STRPTR)MCM_SaveAs         ,"S",0 ,0             ,(APTR)CMP_SAVE     },
  1237.     { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  1238.     { NM_ITEM , (STRPTR)MCM_Cancel         ,"C",0 ,0             ,(APTR)CMP_CANCEL   },
  1239.     { NM_END,NULL,0,0,0,(APTR)0 }
  1240. };
  1241. ///
  1242. /******************************************/
  1243. /* Launcher class                         */
  1244. /******************************************/
  1245. ///
  1246. #define lind_realcenter     0
  1247. #define lind_center         1
  1248. #define lind_left           2
  1249. #define lind_right          3
  1250.  
  1251. #define launch_wb           0
  1252. #define launch_cli          1
  1253.  
  1254. #define Dis_ID_NewEntry     13
  1255. #define Dis_ID_RemoveEntry  14
  1256. #define Dis_ID_CloneEntry   15
  1257. #define Dis_ID_ChangeActive 16
  1258. #define Dis_ID_InsertActive 17
  1259. #define Dis_ID_LoadSet      19
  1260. #define Dis_ID_LoadStr      20
  1261. #define Dis_ID_SaveLauncher 21
  1262. #define Dis_ID_LoadLauncher 22
  1263.  
  1264. struct lau_entry
  1265. {
  1266.     char    lau_titl[32];
  1267.     char    lau_cmd[256];
  1268.     UWORD   lau_type;
  1269.     char    lau_pth[256];
  1270.     char    lau_out[256];
  1271.     char    lau_img[256];
  1272.     ULONG   lau_stack;
  1273. };
  1274.  
  1275. char   *reglauncher[]   ={(STRPTR)MCR_entries,(STRPTR)MCR_general,(STRPTR)MCR_colors,0L};
  1276. char   *cyplace[]       ={(STRPTR)MCR_up,(STRPTR)MCR_down,(STRPTR)MCR_over,0L};
  1277. char   *cyindent[]      ={(STRPTR)MCR_rightcenter,(STRPTR)MCR_center,(STRPTR)MCR_left,(STRPTR)MCR_right,0L};
  1278. char   *lau_type[]      ={"WB","CLI",0L};
  1279.  
  1280. __saveds __asm APTR lau_consfunc(__a1 struct ls_layout *src)
  1281. {
  1282.     return(src);
  1283. }
  1284. __saveds __asm ULONG lau_desfunc(__a1 struct ls_layout *src)
  1285. {
  1286.     return(0L);
  1287. }
  1288. __saveds __asm void lau_dispfunc(__a2 char **array,__a1 struct lau_entry *src)
  1289. {
  1290.     *array++ = &src->lau_titl[0];
  1291.     *array++ = &src->lau_cmd[0];
  1292.     *array   = lau_type[src->lau_type];
  1293. }
  1294.  
  1295. static const struct Hook lau_ConstructHook = { { 0,0 }, (void *)lau_consfunc, NULL, NULL };
  1296. static const struct Hook lau_DestructHook  = { { 0,0 }, (void *)lau_desfunc , NULL, NULL };
  1297. static const struct Hook lau_DisplayHook   = { { 0,0 }, (void *)lau_dispfunc, NULL, NULL };
  1298.  
  1299. struct Launcher_Data
  1300. {
  1301.     struct tm_gau_set   *gauge;
  1302.     Object              *originator,
  1303.             *BT_Cancel,
  1304.             *BT_Use,
  1305.             *CS_Colors[8],
  1306.             *LAU_Menu,
  1307.             *LV_Entries,
  1308.             *ST_listfile,
  1309.             *CM_Xen,
  1310.             *CM_Bg,
  1311.             *CM_Shadow,
  1312.             *CM_Border,
  1313.             *BT_New,
  1314.             *BT_Remove,
  1315.             *BT_Clone,
  1316.             *BT_Save,
  1317.             *BT_Reload,
  1318.             *ST_File,
  1319.             *ST_Title,
  1320.             *ST_Stack,
  1321.             *ST_Path,
  1322.             *ST_Out,
  1323.             *CY_File,
  1324.             *CY_Place,
  1325.             *CY_Indent,
  1326.             *NB_Height,
  1327.             *ST_Font,
  1328.             *ST_Label,
  1329.             *ST_Img,
  1330.             *ST_MImg;
  1331. };
  1332.  
  1333. struct LauncherFinishMsg
  1334. {
  1335.     ULONG   MethodID;
  1336.     Object  *win;
  1337.     ULONG   ok;
  1338. };
  1339.  
  1340. ULONG Launcher_Close(struct IClass *cl, Object *obj, struct LauncherFinishMsg *msg)
  1341. {
  1342.     if(msg->ok)
  1343.     {
  1344.     if(DoMethod(msg->win,Dis_ID_LauncherSave))
  1345.     {
  1346.         set(msg->win,MUIA_Window_Open,FALSE);
  1347.         DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
  1348.         MUI_DisposeObject(msg->win);
  1349.     }
  1350.     }
  1351.     else
  1352.     {
  1353.     set(msg->win,MUIA_Window_Open,FALSE);
  1354.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
  1355.     MUI_DisposeObject(msg->win);
  1356.     }
  1357.     return((ULONG)0L);
  1358. }
  1359.  
  1360. insertLauncherSettings(struct tm_gau_set *gauge, struct Launcher_Data *data)
  1361. {
  1362.     int     i;
  1363.     char    dummy[256];
  1364.     for(i=0;i<8;i++) initColor(&gauge->Colors[i],data->CS_Colors[i]);
  1365.     set(data->CM_Xen     ,MUIA_Selected,        gauge->sty_3d);
  1366.     set(data->CM_Border  ,MUIA_Selected,        gauge->sty_border);
  1367.     set(data->CM_Bg      ,MUIA_Selected,        gauge->sty_bg);
  1368.     set(data->CM_Shadow  ,MUIA_Selected,        gauge->sty_shadow);
  1369.     set(data->CY_Place   ,MUIA_Cycle_Active,    gauge->sty_nogauge);
  1370.     set(data->CY_Indent  ,MUIA_Cycle_Active,    gauge->indent);
  1371.     set(data->ST_listfile,MUIA_String_Contents, gauge->expansion);
  1372.     set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100);
  1373.     strcpy(&dummy[0],gauge->font);
  1374.     sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size);
  1375.     set(data->ST_Font   ,MUIA_String_Contents,&dummy[0]);
  1376. }
  1377.  
  1378. saveLauncherSettings(struct Launcher_Data *data)
  1379. {
  1380.     int i;
  1381.     ULONG dummy;
  1382.     for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]);
  1383.     get(data->CM_Xen    ,MUIA_Selected       ,&dummy); data->gauge->sty_3d      =(UWORD)dummy;
  1384.     get(data->CM_Border ,MUIA_Selected       ,&dummy); data->gauge->sty_border  =(UWORD)dummy;
  1385.     get(data->CM_Bg     ,MUIA_Selected       ,&dummy); data->gauge->sty_bg      =(UWORD)dummy;
  1386.     get(data->CM_Shadow ,MUIA_Selected       ,&dummy); data->gauge->sty_shadow  =(UWORD)dummy;
  1387.     get(data->CY_Place  ,MUIA_Cycle_Active   ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy;
  1388.     get(data->CY_Indent ,MUIA_Cycle_Active   ,&dummy); data->gauge->indent      =(UWORD)dummy;
  1389.     get(data->ST_listfile,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->expansion[0], dummy ? (char *)dummy : " " );
  1390.  
  1391.     get(data->NB_Height ,MUIA_Numeric_Value  ,&dummy); data->gauge->size_y      =(UWORD)dummy-100;
  1392.     get(data->ST_Font   ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i);
  1393.     strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i;
  1394.  
  1395.     DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
  1396. }
  1397.  
  1398. LoadLauncherSet(struct IClass *cl,Object *obj)
  1399. {
  1400.     struct Launcher_Data    *data=INST_DATA(cl,obj);
  1401.     char                    *file;
  1402.     ULONG                   my_file;
  1403.     ULONG                   buf;
  1404.  
  1405.     if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE))
  1406.     {
  1407.     if(my_file=(ULONG)Open(file,MODE_OLDFILE))
  1408.     {
  1409.         Read(my_file,&buf,4L);
  1410.         if(buf==0x544D4732)
  1411.         {
  1412.         Read(my_file,data->gauge,sizeof(struct tm_gau_set));
  1413.         insertLauncherSettings(data->gauge,data);
  1414.         DoMethod(obj,Dis_ID_LoadSet,0L);
  1415.         }
  1416.         else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL);
  1417.         Close(my_file);
  1418.     }
  1419.     }
  1420. }
  1421.  
  1422. SaveLauncherSet(struct IClass *cl,Object *obj)
  1423. {
  1424.     struct Launcher_Data        *data=INST_DATA(cl,obj);
  1425.     char                        *file;
  1426.     ULONG                       buf,my_file;
  1427.  
  1428.     saveLauncherSettings( data );
  1429.  
  1430.     buf=0x544D4732;
  1431.  
  1432.     if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE))
  1433.     {
  1434.     if(my_file=Open(file,MODE_NEWFILE))
  1435.     {
  1436.         Write(my_file,&buf,4L);
  1437.         Write(my_file,data->gauge,sizeof(struct tm_gau_set));
  1438.         Close(my_file);
  1439.     }
  1440.     }
  1441. }
  1442.  
  1443. struct Launcher_Message
  1444. {
  1445.     ULONG   MethodID;
  1446. };
  1447.  
  1448. static struct lau_entry lau_default=
  1449. {
  1450.     "Empty",
  1451.     "",
  1452.     0,
  1453.     "",
  1454.     "",
  1455.     "",
  1456.     4096
  1457. };
  1458.  
  1459. Launcher_ChangeActive(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1460. {
  1461.     struct lau_entry        *entry;
  1462.     struct Launcher_Data    *data;
  1463.     data=INST_DATA(cl,obj);
  1464.  
  1465.     DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active, &entry);
  1466.     if(entry)
  1467.     {
  1468.     set(data->ST_File,  MUIA_String_Contents,   entry->lau_cmd);
  1469.     set(data->ST_Title, MUIA_String_Contents,   entry->lau_titl);
  1470.     set(data->ST_Path,  MUIA_String_Contents,   entry->lau_pth);
  1471.     set(data->ST_Out,   MUIA_String_Contents,   entry->lau_out);
  1472.     set(data->ST_Img,   MUIA_String_Contents,   entry->lau_img);
  1473.     set(data->ST_Stack, MUIA_String_Integer,    (ULONG)entry->lau_stack);
  1474.  
  1475.     // This MUST be the last!
  1476.     set(data->CY_File,  MUIA_Cycle_Active   ,   (ULONG)entry->lau_type);
  1477.     }
  1478. }
  1479.  
  1480. Launcher_InsertActive(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1481. {
  1482.     char                    *str,*foo,*dummy,*foobar,*klatuu;
  1483.     struct  lau_entry       *entry;
  1484.     ULONG                   active,stk;
  1485.     struct Launcher_Data    *data;
  1486.     data=INST_DATA(cl,obj);
  1487.  
  1488.     get(data->ST_File   ,MUIA_String_Contents,      &str);
  1489.     get(data->ST_Title  ,MUIA_String_Contents,      &foo);
  1490.     get(data->ST_Path   ,MUIA_String_Contents,      &dummy);
  1491.     get(data->ST_Out    ,MUIA_String_Contents,      &foobar);
  1492.     get(data->ST_Img    ,MUIA_String_Contents,      &klatuu);
  1493.     get(data->ST_Img    ,MUIA_String_Contents,      &klatuu);
  1494.     get(data->ST_Stack  ,MUIA_String_Integer,       &stk);
  1495.     get(data->CY_File   ,MUIA_Cycle_Active,         &active);
  1496.  
  1497.     DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active, &entry);
  1498.     if(entry)
  1499.     {
  1500.     strcpy(entry->lau_titl,foo);
  1501.     strcpy(entry->lau_cmd, str);
  1502.     strcpy(entry->lau_pth, dummy);
  1503.     strcpy(entry->lau_out, foobar);
  1504.     strcpy(entry->lau_img, klatuu);
  1505.     entry->lau_stack = stk;
  1506.     entry->lau_type  = (UWORD)active;
  1507.     DoMethod(data->LV_Entries,MUIM_List_Redraw,MUIV_List_Redraw_Active);
  1508.     }
  1509. }
  1510.  
  1511. __geta4 LONG AppMsgFunc(__A2 APTR obj, __A1 struct AppMessage **x)
  1512. {
  1513.     struct WBArg *ap;
  1514.     ULONG                   active;
  1515.     struct lau_entry        *entry;
  1516.     struct AppMessage *amsg = *x;
  1517.     int i;
  1518.     static char buf[256];
  1519.     char *b=buf;
  1520.  
  1521.     for (ap=amsg->am_ArgList,i=0;i<amsg->am_NumArgs;i++,ap++)
  1522.     {
  1523.  
  1524.         get(obj,MUIA_List_Active,&active);
  1525.         if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
  1526.         {
  1527.         CopyMem(&lau_default,entry, sizeof(struct lau_entry));
  1528.  
  1529.         NameFromLock(ap->wa_Lock,buf,sizeof(buf));
  1530.         strcpy(entry->lau_pth, buf);
  1531.         strcpy(entry->lau_titl,ap->wa_Name);
  1532.         AddPart(buf,ap->wa_Name,sizeof(buf));
  1533.         strcpy(entry->lau_cmd, buf);
  1534.         entry->lau_type=0L;
  1535.  
  1536.         DoMethod(obj, MUIM_List_InsertSingle, entry,active);
  1537.         set     (obj, MUIA_List_Active,       active);
  1538.         }
  1539.     }
  1540.     return(0);
  1541. }
  1542.  
  1543. static const struct Hook AppMsgHook = { { NULL,NULL },(void *)AppMsgFunc,NULL,NULL };
  1544.  
  1545. Launcher_NewEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1546. {
  1547.     ULONG                   active;
  1548.     struct lau_entry        *entry;
  1549.     struct Launcher_Data    *data;
  1550.     data=INST_DATA(cl,obj);
  1551.     get(data->LV_Entries,MUIA_List_Active,&active);
  1552.     if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
  1553.     {
  1554.     CopyMem(&lau_default,entry, sizeof(struct lau_entry));
  1555.     DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,active);
  1556.     set     (data->LV_Entries, MUIA_List_Active,       active);
  1557.     }
  1558. }
  1559.  
  1560. Launcher_RemoveEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1561. {
  1562.     struct Launcher_Data    *data;
  1563.     data=INST_DATA(cl,obj);
  1564.     DoMethod(data->LV_Entries,MUIM_List_Remove,MUIV_List_Remove_Active);
  1565. }
  1566.  
  1567. Launcher_CloneEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1568. {
  1569.     struct lau_entry        *desc,*news;
  1570.     struct Launcher_Data    *data;
  1571.     data=INST_DATA(cl,obj);
  1572.     DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
  1573.     if (desc)
  1574.     {
  1575.     if(news=AllocVec(sizeof(struct lau_entry),0L))
  1576.     {
  1577.         CopyMem(desc,news,sizeof(struct lau_entry));
  1578.         DoMethod(data->LV_Entries,MUIM_List_InsertSingle,news,MUIV_List_Insert_Active);
  1579.     }
  1580.     }
  1581. }
  1582.  
  1583. Launcher_CleanString(char *buffer)
  1584. {
  1585.     int i;
  1586.     if((i=strlen(buffer))<1)
  1587.     {
  1588.     buffer[0]=0x00;
  1589.     }
  1590.     else
  1591.     {
  1592.     if(buffer[i-1]==0x0a)
  1593.     {
  1594.         buffer[i-1]=0x00;
  1595.     }
  1596.     }
  1597. }
  1598.  
  1599. Launcher_LoadFromSettings(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1600. {
  1601.     BPTR                    file;
  1602.     char                    buffer[256];
  1603.     struct Launcher_Data    *data;
  1604.     struct  lau_entry       *entry;
  1605.  
  1606.     data=INST_DATA(cl,obj);
  1607.  
  1608.     if(file=(BPTR)Open(&data->gauge->expansion[0],MODE_OLDFILE))
  1609.     {
  1610.     if(FGets(file,&buffer[0],255))
  1611.     {
  1612.         if(*((ULONG *)&buffer[0])==0x544D4C49)
  1613.         {
  1614.         if(FGets(file,&buffer[0],255))
  1615.         {
  1616.             Launcher_CleanString(buffer);
  1617.             set(data->ST_Label,MUIA_String_Contents,&buffer[0]);
  1618.             if(FGets(file,&buffer[0],255))
  1619.             {
  1620.             Launcher_CleanString(buffer);
  1621.             set(data->ST_MImg,MUIA_String_Contents,&buffer[0]);
  1622.             while(FGets(file,&buffer[0],32))
  1623.             {
  1624.                 if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
  1625.                 {
  1626.                 Launcher_CleanString(buffer);
  1627.                 strcpy(entry->lau_titl,buffer);
  1628.                 if(FGets(file,buffer,255))
  1629.                 {
  1630.                     Launcher_CleanString(buffer);
  1631.                     strcpy(entry->lau_cmd,buffer);
  1632.                     if(FGets(file,buffer,4))
  1633.                     {
  1634.                     entry->lau_type=*((UBYTE *)&buffer[0])-0x30;
  1635.                     if(FGets(file,buffer,255))
  1636.                     {
  1637.                         Launcher_CleanString(buffer);
  1638.                         strcpy(entry->lau_pth,buffer);
  1639.                         if(FGets(file,buffer,255))
  1640.                         {
  1641.                         Launcher_CleanString(buffer);
  1642.                         strcpy(entry->lau_out,buffer);
  1643.                         if(FGets(file,buffer,16))
  1644.                         {
  1645.                             Launcher_CleanString(buffer);
  1646.                             sscanf(buffer,"%ld",&entry->lau_stack);
  1647.                             if(FGets(file,buffer,255))
  1648.                             {
  1649.                             Launcher_CleanString(buffer);
  1650.                             strcpy(entry->lau_img,buffer);
  1651.                             }
  1652.                             else strcpy(entry->lau_out,"");
  1653.                         }
  1654.                         else entry->lau_stack=0;
  1655.                         }
  1656.                         else strcpy(entry->lau_out," ");
  1657.                     }
  1658.                     else strcpy(entry->lau_pth," ");
  1659.                     }
  1660.                     else entry->lau_type=0;
  1661.                 }
  1662.                 else strcpy(entry->lau_titl,"Empty");
  1663.                 DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,MUIV_List_Insert_Bottom);
  1664.                 }
  1665.             }
  1666.             }
  1667.         }
  1668.         }
  1669.     }
  1670.     Close(file);
  1671.     }
  1672. }
  1673.  
  1674. Launcher_LoadFromString(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1675. {
  1676.     BPTR                    file;
  1677.     char                    *filename;
  1678.     char                    buffer[256];
  1679.     struct Launcher_Data    *data;
  1680.     struct  lau_entry       *entry;
  1681.  
  1682.     data=INST_DATA(cl,obj);;
  1683.  
  1684.     get(data->ST_listfile,MUIA_String_Contents,&filename);
  1685.     if(filename)
  1686.     {
  1687.     if(file=(BPTR)Open(filename,MODE_OLDFILE))
  1688.     {
  1689.         DoMethod(data->LV_Entries,MUIM_List_Clear,0L);
  1690.         if(FGets(file,&buffer[0],255))
  1691.         {
  1692.         if(*((ULONG *)&buffer[0])==0x544D4C49)
  1693.         {
  1694.             if(FGets(file,&buffer[0],255))
  1695.             {
  1696.             Launcher_CleanString(buffer);
  1697.             set(data->ST_Label,MUIA_String_Contents,&buffer[0]);
  1698.             if(FGets(file,&buffer[0],255))
  1699.             {
  1700.                 Launcher_CleanString(buffer);
  1701.                 set(data->ST_MImg,MUIA_String_Contents,&buffer[0]);
  1702.                 while(FGets(file,&buffer[0],32))
  1703.                 {
  1704.                 if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR))
  1705.                 {
  1706.                     Launcher_CleanString(buffer);
  1707.                     strcpy(entry->lau_titl,buffer);
  1708.                     if(FGets(file,buffer,255))
  1709.                     {
  1710.                     Launcher_CleanString(buffer);
  1711.                     strcpy(entry->lau_cmd,buffer);
  1712.                     if(FGets(file,buffer,4))
  1713.                     {
  1714.                         entry->lau_type=*((UBYTE *)&buffer[0])-0x30;
  1715.                         if(FGets(file,buffer,255))
  1716.                         {
  1717.                         Launcher_CleanString(buffer);
  1718.                         strcpy(entry->lau_pth,buffer);
  1719.                         if(FGets(file,buffer,255))
  1720.                         {
  1721.                             Launcher_CleanString(buffer);
  1722.                             strcpy(entry->lau_out,buffer);
  1723.                             if(FGets(file,buffer,16))
  1724.                             {
  1725.                             Launcher_CleanString(buffer);
  1726.                             sscanf(buffer,"%ld",&entry->lau_stack);
  1727.                             if(FGets(file,buffer,255))
  1728.                             {
  1729.                                 Launcher_CleanString(buffer);
  1730.                                 strcpy(entry->lau_img,buffer);
  1731.                             }
  1732.                             else strcpy(entry->lau_out,"");
  1733.                             }
  1734.                             else entry->lau_stack=0;
  1735.                         }
  1736.                         else strcpy(entry->lau_out,"");
  1737.                         }
  1738.                         else strcpy(entry->lau_pth,"");
  1739.                     }
  1740.                     else entry->lau_type=0;
  1741.                     }
  1742.                     else strcpy(entry->lau_titl,"Empty");
  1743.                     DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,MUIV_List_Insert_Bottom);
  1744.                 }
  1745.                 }
  1746.             }
  1747.             }
  1748.         }
  1749.         }
  1750.         Close(file);
  1751.     }
  1752.     }
  1753. }
  1754.  
  1755. ULONG Launcher_Save(struct IClass *cl,Object *obj,struct Launcher_Message *msg)
  1756. {
  1757.     int                 i;
  1758.     struct lau_entry    *entry;
  1759.     char                *filename,
  1760.             *label,
  1761.             buffer[256];
  1762.     BPTR                file;
  1763.     struct Launcher_Data *data;
  1764.  
  1765.     data=INST_DATA(cl,obj);
  1766.  
  1767.     get(data->ST_listfile,MUIA_String_Contents,&filename);
  1768.     if(filename&&filename[0])
  1769.     {
  1770.     if(strcmp(filename,"Provide a filename!")!=0)
  1771.     {
  1772.         if(file=(BPTR)Open(filename,MODE_NEWFILE))
  1773.         {
  1774.         FPuts(file,"TMLI\n");
  1775.  
  1776.         get(data->ST_Label,MUIA_String_Contents,&label);
  1777.         FPuts(file,label);
  1778.         FPutC(file,0x0a);
  1779.  
  1780.         get(data->ST_MImg,MUIA_String_Contents,&label);
  1781.         FPuts(file,label);
  1782.         FPutC(file,0x0a);
  1783.  
  1784.         for (i=0;;i++)
  1785.         {
  1786.             DoMethod(data->LV_Entries,MUIM_List_GetEntry,i,&entry);
  1787.             if (!entry) break;
  1788.             FPuts(file,entry->lau_titl);
  1789.             FPutC(file,0x0a);
  1790.             FPuts(file,entry->lau_cmd);
  1791.             FPutC(file,0x0a);
  1792.             FPutC(file,entry->lau_type+0x30);
  1793.             FPutC(file,0x0a);
  1794.             FPuts(file,entry->lau_pth);
  1795.             FPutC(file,0x0a);
  1796.             FPuts(file,entry->lau_out);
  1797.             FPutC(file,0x0a);
  1798.             sprintf(&buffer[0],"%0ld",entry->lau_stack);
  1799.             FPuts(file,&buffer[0]);
  1800.             FPutC(file,0x0a);
  1801.             FPuts(file,entry->lau_img);
  1802.             FPutC(file,0x0a);
  1803.         }
  1804.         Close(file);
  1805.         saveLauncherSettings(data);
  1806.         return(TRUE);
  1807.         }
  1808.     }
  1809.     }
  1810.     MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MOL_nofilename_fmt),GetStr(MOL_nofilename),NULL);
  1811.     return(FALSE);
  1812. }
  1813.  
  1814. static ULONG Launcher_New(struct IClass *cl,Object *obj,struct opSet *msg)
  1815. {
  1816.     struct Launcher_Data    *data,*new_data;
  1817.  
  1818.     if(new_data=AllocVec(sizeof(struct Launcher_Data),0L))
  1819.     {
  1820.     if(new_data->gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList))
  1821.     {
  1822.         if( obj = (Object *)DoSuperNew(cl,obj,
  1823.             MUIA_Window_Title       , gau_types[new_data->gauge->type] ,
  1824.             MUIA_Window_ID          , MAKE_ID('T','M','L','A'),
  1825.             MUIA_Window_Menustrip   , new_data->LAU_Menu = MUI_MakeObject(MUIO_MenustripNM,LauMenuData,0),
  1826.             MUIA_Window_AppWindow   , TRUE,
  1827.             WindowContents, VGroup, ButtonFrame,
  1828.             Child, HGroup,
  1829.                 Child, VGroup, MUIA_Background, MUII_SHADOW,
  1830.                 Child, VSpace(0),
  1831.                 Child, BodychunkObject,
  1832.                     MUIA_FixWidth             , HEADER_LOGO_WIDTH ,
  1833.                     MUIA_FixHeight            , HEADER_LOGO_HEIGHT,
  1834.                     MUIA_Bitmap_Width         , HEADER_LOGO_WIDTH ,
  1835.                     MUIA_Bitmap_Height        , HEADER_LOGO_HEIGHT,
  1836.                     MUIA_Bodychunk_Depth      , HEADER_LOGO_DEPTH ,
  1837.                     MUIA_Bodychunk_Body       , (UBYTE *)header_logo_body,
  1838.                     MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION,
  1839.                     MUIA_Bodychunk_Masking    , HEADER_LOGO_MASKING,
  1840.                     MUIA_Bitmap_SourceColors  , (ULONG *)header_logo_colors,
  1841.                     MUIA_Bitmap_Transparent   , 0,
  1842.                 End,
  1843.                 End,
  1844.                 Child, RegisterGroup(reglauncher),
  1845.                 MUIA_Register_Frame, TRUE,
  1846.                 Child, VGroup,
  1847.                     Child, VGroup,
  1848.                     Child, new_data->LV_Entries=(Object *)ListviewObject,
  1849.                         MUIA_Listview_Input, TRUE,
  1850.                         MUIA_Listview_DragType, 1,
  1851.                         MUIA_Dropable, FALSE,
  1852.                         MUIA_Listview_List, ListObject,
  1853.                         MUIA_Frame, MUIV_Frame_InputList,
  1854.                         MUIA_List_DragSortable, TRUE,
  1855.                         MUIA_List_ConstructHook, &lau_ConstructHook,
  1856.                         MUIA_List_DestructHook , &lau_DestructHook,
  1857.                         MUIA_List_DisplayHook  , &lau_DisplayHook,
  1858.                         MUIA_List_Format       , "BAR,MIW=5 MAW=100 BAR,",
  1859.                         MUIA_List_Active, MUIV_List_Active_Top,
  1860.                         End,
  1861.                     End,
  1862.                     Child, HGroup,
  1863.                         Child, Label(GetStr(MLO_Command)),
  1864.                         Child, new_data->ST_File=PopaslObject,
  1865.                         MUIA_Popstring_String, String(NULL,255),
  1866.                         MUIA_Popstring_Button, PopButton(MUII_PopFile),
  1867.                         ASLFO_TitleText  , GetStr(MLO_sel_listfile),
  1868.                         End,
  1869.                         Child, new_data->CY_File=CycleObject,
  1870.                         MUIA_Cycle_Entries, &lau_type[0],
  1871.                         MUIA_Weight, 0,
  1872.                         End,
  1873.                     End,
  1874.                     Child, ColGroup(4),
  1875.                         Child, Label(GetStr(MLO_Title)),
  1876.                         Child, new_data->ST_Title=String(0,32),
  1877.                         Child, Label(GetStr(MLO_Pic)),
  1878.                         Child, new_data->ST_Img=PopaslObject,
  1879.                         MUIA_Popstring_String, String(NULL,255),
  1880.                         MUIA_Popstring_Button, PopButton(MUII_PopFile),
  1881.                         ASLFO_TitleText  , GetStr(MLO_sel_listfile),
  1882.                         End,
  1883.                         Child, Label(GetStr(MLO_WorkDir)),
  1884.                         Child, new_data->ST_Path=PopaslObject,
  1885.                         MUIA_Popstring_String, String(NULL,255),
  1886.                         MUIA_Popstring_Button, PopButton(MUII_PopFile),
  1887.                         ASLFO_TitleText  , GetStr(MLO_sel_listfile),
  1888.                         End,
  1889.                         Child, Label(GetStr(MLO_OutPut)),
  1890.                         Child, new_data->ST_Out=String(NULL,32),
  1891.                         Child, Label(GetStr(MLO_Stack)),
  1892.                         Child, new_data->ST_Stack=StringObject,
  1893.                         StringFrame,
  1894.                         MUIA_String_Accept,     "0123456789",
  1895.                         MUIA_String_MaxLen,     32,
  1896.                         MUIA_String_Contents,   NULL,
  1897.                         End,
  1898.                         Child, HVSpace,
  1899.                         Child, HVSpace,
  1900.                     End,
  1901.                     Child, ColGroup(3),
  1902.                         Child,  new_data->BT_New=SimpleButton(GetStr(MLO_New)),
  1903.                         Child,  new_data->BT_Remove=SimpleButton(GetStr(MLO_Remove)),
  1904.                         Child,  new_data->BT_Clone=SimpleButton(GetStr(MLO_Clone)),
  1905.                     End,
  1906.                     End,
  1907.                 End,
  1908.                 Child, VGroup,
  1909.                     MUIA_Group_SameWidth,FALSE,
  1910.                     Child, ColGroup(2),
  1911.                     Child, Label(GetStr(MCO_xen)),
  1912.                     Child, HGroup, Child, new_data->CM_Xen=CheckMark(new_data->gauge->sty_3d), Child, HVSpace, End,
  1913.                     Child, Label(GetStr(MCO_slabel)),
  1914.                     Child, HGroup, Child, new_data->CM_Shadow=CheckMark(new_data->gauge->sty_shadow), Child, HVSpace, End,
  1915.                     Child, Label(GetStr(MCO_background)),
  1916.                     Child, HGroup, Child, new_data->CM_Bg=CheckMark(new_data->gauge->sty_bg), Child, HVSpace, End,
  1917.                     Child, Label(GetStr(MCO_border)),
  1918.                     Child, HGroup, Child, new_data->CM_Border=CheckMark(new_data->gauge->sty_border), Child, HVSpace, End,
  1919.                     Child, Label(GetStr(MCO_place)),
  1920.                     Child, HGroup, Child, new_data->CY_Place=CycleObject,
  1921.                         MUIA_Cycle_Entries, &cyplace[0],
  1922.                     End, Child, HVSpace, End,
  1923.                     Child, Label(GetStr(MCR_poslabel)),
  1924.                     Child, HGroup, Child, new_data->CY_Indent=CycleObject,
  1925.                         MUIA_Cycle_Entries, &cyindent[0],
  1926.                     End, Child, HVSpace, End,
  1927.                     Child, Label(GetStr(MCO_height)),
  1928.                     Child, ColGroup(2), Child, new_data->NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,1000,GetStr(MCO_height_fmt)), Child, HVSpace, End,
  1929.                     Child, Label(GetStr(MCO_font)),
  1930.                     Child,  PopaslObject,
  1931.                         MUIA_Popstring_String, new_data->ST_Font=(Object *)String(0L,80),
  1932.                         MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1933.                         MUIA_Popasl_Type , ASL_FontRequest,
  1934.                         ASLFO_TitleText  , GetStr(MCO_sel_font),
  1935.                     End,
  1936.                     End,
  1937.                 End,
  1938.  
  1939.                 Child, ColGroup(2), 
  1940.                     Child, ColGroup(2),
  1941.                     Child, VSpace(0),
  1942.                     Child, VSpace(0),
  1943.                     Child, Label(GetStr(MCO_col_label)),
  1944.                     Child, new_data->CS_Colors[col_label]     =MakePen(),
  1945.                     Child, Label(GetStr(MCO_col_entry)),
  1946.                     Child, new_data->CS_Colors[col_format]    =MakePen(),
  1947.                     Child, Label(GetStr(MCO_col_hbright)),
  1948.                     Child, new_data->CS_Colors[col_base]      =MakePen(),
  1949.                     Child, Label(GetStr(MCO_col_hdark)),
  1950.                     Child, new_data->CS_Colors[col_current]   =MakePen(),
  1951.                     Child, VSpace(0),
  1952.                     Child, VSpace(0),
  1953.                     End,
  1954.  
  1955.                     Child, ColGroup(2),
  1956.                     Child, VSpace(0),
  1957.                     Child, VSpace(0),
  1958.                     Child, Label(GetStr(MCO_col_cursor)),
  1959.                     Child, new_data->CS_Colors[col_negative]  =MakePen(),
  1960.                     Child, Label(GetStr(MCO_col_bright)),
  1961.                     Child, new_data->CS_Colors[col_bright]    =MakePen(),
  1962.                     Child, Label(GetStr(MCO_col_dark)),
  1963.                     Child, new_data->CS_Colors[col_dark]      =MakePen(),
  1964.                     Child, Label(GetStr(MCO_col_bg)),
  1965.                     Child, new_data->CS_Colors[col_bg]        =MakePen(),
  1966.                     Child, VSpace(0),
  1967.                     Child, VSpace(0),
  1968.                     End,
  1969.                 End,
  1970.                 End,
  1971.             End,
  1972.             Child, VGroup,
  1973.                 Child, ColGroup(2), GroupFrame,
  1974.                 Child, Label(GetStr(MCO_label)),
  1975.                 Child, ColGroup(3),
  1976.                     Child, new_data->ST_Label=String(0L,16),
  1977.                     Child, Label(GetStr(MLO_Pic)),
  1978.                     Child, new_data->ST_MImg=PopaslObject,
  1979.                     MUIA_Popstring_String, String(NULL,255),
  1980.                     MUIA_Popstring_Button, PopButton(MUII_PopFile),
  1981.                     ASLFO_TitleText  , GetStr(MLO_sel_picfile),
  1982.                     End,
  1983.                 End,
  1984.                 Child, Label(GetStr(MLO_listfile)),
  1985.                 Child, HGroup,
  1986.                     Child, new_data->ST_listfile=PopaslObject,
  1987.                     MUIA_Popstring_String, String(NULL,255),
  1988.                     MUIA_Popstring_Button, PopButton(MUII_PopFile),
  1989.                     ASLFO_TitleText  , GetStr(MLO_sel_listfile),
  1990.                     End,
  1991.                     Child, new_data->BT_Reload=TextObject,
  1992.                     ButtonFrame,
  1993.                     MUIA_Text_Contents, GetStr(MLO_Load),
  1994.                     MUIA_Text_PreParse, "\33c",
  1995.                     MUIA_InputMode    , MUIV_InputMode_RelVerify,
  1996.                     MUIA_Background   , MUII_ButtonBack,
  1997.                     MUIA_Weight,        0,
  1998.                     End,
  1999.                 End,
  2000.                 End,
  2001.                 Child, HGroup,
  2002.                 Child, new_data->BT_Save    = (Object *)SimpleButton(GetStr(MLO_Save)),
  2003.                 Child, new_data->BT_Cancel  = (Object *)SimpleButton(GetStr(MCO_Cancel)),
  2004.                 End,
  2005.             End,
  2006.             End,
  2007.         End)
  2008.         {
  2009.         data=INST_DATA(cl,obj);
  2010.  
  2011.         set(data->ST_Stack,MUIA_ShortHelp,GetStr(MOL_Stack));
  2012.         set(data->ST_Out,MUIA_ShortHelp,GetStr(MOL_Out));
  2013.         set(data->ST_listfile,MUIA_ShortHelp,GetStr(MOL_listfile));
  2014.  
  2015.         CopyMem(new_data,data,sizeof(struct Launcher_Data));
  2016.         FreeVec(new_data);
  2017.  
  2018.         data->originator = (Object *)GetTagData(Originator,0,msg->ops_AttrList);
  2019.  
  2020.         insertLauncherSettings(data->gauge,data);
  2021.  
  2022.         DoMethod(obj,Dis_ID_LoadSet,0L);
  2023.  
  2024.         DoMethod(obj,             MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,FALSE,data->ST_listfile);
  2025.         DoMethod(data->BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,FALSE,data->ST_listfile);
  2026.         DoMethod(data->BT_Save,   MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,TRUE, data->ST_listfile);
  2027.         DoMethod(data->BT_New,    MUIM_Notify,MUIA_Pressed,FALSE,                       obj,1,Dis_ID_NewEntry);
  2028.         DoMethod(data->BT_Remove, MUIM_Notify,MUIA_Pressed,FALSE,                       obj,1,Dis_ID_RemoveEntry);
  2029.         DoMethod(data->BT_Clone,  MUIM_Notify,MUIA_Pressed,FALSE,                       obj,1,Dis_ID_CloneEntry);
  2030.         DoMethod(data->BT_Reload, MUIM_Notify,MUIA_Pressed,FALSE,                       obj,1,Dis_ID_LoadStr);
  2031.         DoMethod(data->LV_Entries,MUIM_Notify,MUIA_List_Active,MUIV_EveryTime,          obj,1,Dis_ID_ChangeActive);
  2032.         DoMethod(data->ST_File,   MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,   obj,1,Dis_ID_InsertActive);
  2033.         DoMethod(data->ST_Title,  MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,   obj,1,Dis_ID_InsertActive);
  2034.         DoMethod(data->ST_Stack,  MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,   obj,1,Dis_ID_InsertActive);
  2035.         DoMethod(data->ST_Path,   MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,   obj,1,Dis_ID_InsertActive);
  2036.         DoMethod(data->ST_Img,    MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,   obj,1,Dis_ID_InsertActive);
  2037.         DoMethod(data->CY_File,   MUIM_Notify,MUIA_Cycle_Active,MUIV_EveryTime,         obj,1,Dis_ID_InsertActive);
  2038.  
  2039.         DoMethod(data->LV_Entries,MUIM_Notify,MUIA_AppMessage,MUIV_EveryTime,data->LV_Entries,3,MUIM_CallHook,&AppMsgHook,MUIV_TriggerValue);
  2040.  
  2041.         set(data->ST_Out,MUIA_Disabled,TRUE);
  2042.         DoMethod(data->CY_File,   MUIM_Notify,MUIA_Cycle_Active,0,data->ST_Out,3,MUIM_Set,MUIA_Disabled,TRUE);
  2043.         DoMethod(data->CY_File,   MUIM_Notify,MUIA_Cycle_Active,1,data->ST_Out,3,MUIM_Set,MUIA_Disabled,FALSE);
  2044.  
  2045.         DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveLauncher);
  2046.         DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadLauncher);
  2047.  
  2048.         return((ULONG)obj);
  2049.         }
  2050.     }
  2051.     }
  2052.     return(0L);
  2053. }
  2054.  
  2055. static __saveds __asm ULONG LauncherDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  2056. {
  2057.     switch (msg->MethodID)
  2058.     {
  2059.     case OM_NEW                     : return(Launcher_New(cl,obj,(APTR)msg));
  2060.     case Dis_ID_NewEntry            : return(Launcher_NewEntry(cl,obj,(APTR)msg));
  2061.     case Dis_ID_RemoveEntry         : return(Launcher_RemoveEntry(cl,obj,(APTR)msg));
  2062.     case Dis_ID_CloneEntry          : return(Launcher_CloneEntry(cl,obj,(APTR)msg));
  2063.     case Dis_ID_ChangeActive        : return(Launcher_ChangeActive(cl,obj,(APTR)msg));
  2064.     case Dis_ID_InsertActive        : return(Launcher_InsertActive(cl,obj,(APTR)msg));
  2065.     case Dis_ID_LauncherSave        : return(Launcher_Save(cl,obj,(APTR)msg));
  2066.     case Dis_ID_LoadStr             : return(Launcher_LoadFromString(cl,obj,(APTR)msg));
  2067.     case Dis_ID_LoadSet             : return(Launcher_LoadFromSettings(cl,obj,(APTR)msg));
  2068.     case Dis_ID_SaveLauncher        : return(SaveLauncherSet(cl,obj));
  2069.     case Dis_ID_LoadLauncher        : return(LoadLauncherSet(cl,obj));
  2070.     }
  2071.     return(DoSuperMethodA(cl,obj,msg));
  2072. }
  2073. ///
  2074. /*************************************************/
  2075. /* Main Window and his dispatcher                */
  2076. /*************************************************/
  2077.  
  2078. /******************************************/
  2079. /* some vars                              */
  2080. /******************************************/
  2081. ///
  2082. #define Dis_ID_DoubleClick1 1
  2083. #define Dis_ID_Finish       2
  2084. #define Dis_ID_DoubleClick2 3
  2085. #define Dis_ID_Save         4
  2086. #define Dis_ID_Snap         5
  2087. #define Dis_ID_Load         6
  2088.  
  2089. struct NewMenu MenuData1[] =
  2090. {
  2091.     { NM_TITLE, (STRPTR)MM_Project         , 0 ,0 ,0             ,(APTR)MEN_PROJECT  },
  2092.     { NM_ITEM , (STRPTR)MM_Open            ,"O",0 ,0             ,(APTR)MEN_OPEN     },
  2093.     { NM_ITEM , (STRPTR)MM_SaveAs          ,"S",0 ,0             ,(APTR)MEN_SAVE     },
  2094.     { NM_ITEM , (STRPTR)MM_About           ,"?",0 ,0             ,(APTR)MEN_ABOUT    },
  2095.     { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  2096.     { NM_ITEM , (STRPTR)MM_Quit            ,"Q",0 ,0             ,(APTR)MEN_QUIT     },
  2097.     { NM_END,NULL,0,0,0,(APTR)0 }
  2098. };
  2099.  
  2100. struct ls_layout
  2101. {
  2102.     char    *entry_desc;
  2103.     BYTE     entry_selected;
  2104.     BOOL     entry_max;
  2105.     char    *entry[6];
  2106. };
  2107.  
  2108. struct  ls_layout switches[]=
  2109. {
  2110.     {(STRPTR)ML_Window,         0,0,0,0,0,0,0,0},
  2111.     {(STRPTR)ML_BgPic,          0,2,(STRPTR)ML_BgPic_None,(STRPTR)ML_BgPic_File,(STRPTR)ML_BgPic_Snap,0,0,0},
  2112.     {(STRPTR)ML_WinBeh,         0,2,(STRPTR)ML_WinBeh_Normal,(STRPTR)ML_WinBeh_Front,(STRPTR)ML_WinBeh_Back,0,0,0},
  2113.     {(STRPTR)ML_WinMov,         0,1,(STRPTR)ML_WinMov_Normal,(STRPTR)ML_WinMov_Fixed,0,0,0,0},
  2114.     {(STRPTR)ML_Border,         0,3,(STRPTR)ML_Border_None,(STRPTR)ML_Border_Simple,(STRPTR)ML_Border_Standard,(STRPTR)ML_Border_Double,0,0},
  2115.     {(STRPTR)ML_Startup,        0,0,0,0,0,0,0,0},
  2116.     {(STRPTR)ML_ScrNot,         0,1,(STRPTR)ML_ScrNot_No,(STRPTR)ML_ScrNot_Yes,0,0,0,0},
  2117.     {(STRPTR)ML_Cpu,            0,2,(STRPTR)ML_Cpu_None,(STRPTR)ML_Cpu_Executive,(STRPTR)ML_Cpu_Own,0,0,0},
  2118.     NULL
  2119. };
  2120.  
  2121. char    *mainlister[]=
  2122. {
  2123.     (STRPTR)MOL_General,
  2124.     (STRPTR)MOL_Compose,
  2125.     NULL
  2126. };
  2127.  
  2128. char    *sublister[]=
  2129. {
  2130.     (STRPTR)MOL_sub_General,
  2131.     (STRPTR)MOL_sub_Flags,
  2132.     (STRPTR)MOL_sub_Window,
  2133.     NULL
  2134. };
  2135.  
  2136. struct MainData
  2137. {
  2138.     ULONG   dummy;
  2139. };
  2140.  
  2141. char    *pubscr[256];
  2142.  
  2143. Object  *BT_Save,
  2144.     *BT_Use,
  2145.     *BT_Test,
  2146.     *BT_Cancel,
  2147.     *ls_Switch,
  2148.     *ls_PubScr,
  2149.     *lv_Switch,
  2150.     *lv_PubScr,
  2151.     *ST_PubScr,
  2152.     *PO_PubScr,
  2153.     *MN_Main,
  2154.     *WI_About,
  2155.     *IN_posx,
  2156.     *IN_posy,
  2157.     *IN_sizx,
  2158.     *ST_bg,
  2159.     *NB_wait,
  2160.     *NB_mem,
  2161.     *NB_vol,
  2162.     *NB_bordx,
  2163.     *NB_bordy,
  2164.     *NB_spcx,
  2165.     *NB_spcy,
  2166.     *NB_col,
  2167.     *NB_pri,
  2168.     *MN_Colors[3],
  2169.     *CM_Falling,
  2170.     *BT_Snap,
  2171.     *LV_Composer;
  2172.  
  2173. ///
  2174. /******************************************/
  2175. /* some listview hooks                    */
  2176. /******************************************/
  2177. ///
  2178. __saveds __asm APTR lay_consfunc(__a1 struct ls_layout *src) { return(src); }
  2179.  
  2180. __saveds __asm ULONG lay_desfunc(__a1 struct ls_layout *src) { return(0L);  }
  2181.  
  2182. __saveds __asm void lay_dispfunc(__a2 char **array,__a1 struct ls_layout *src)
  2183. {
  2184.     *array++ = src->entry_desc;
  2185.     *array   = src->entry[src->entry_selected];
  2186. }
  2187.  
  2188. static const struct Hook lay_ConstructHook = { { 0,0 }, (void *)lay_consfunc, NULL, NULL };
  2189. static const struct Hook lay_DestructHook  = { { 0,0 }, (void *)lay_desfunc , NULL, NULL };
  2190. static const struct Hook lay_DisplayHook   = { { 0,0 }, (void *)lay_dispfunc, NULL, NULL };
  2191. ///
  2192. /******************************************/
  2193. /* load settings and a method             */
  2194. /******************************************/
  2195. ///
  2196. #define load_standard  0
  2197. #define load_file      1
  2198.  
  2199. struct LoadSetMsg
  2200. {
  2201.     ULONG           MethodID;
  2202.     ULONG           what;
  2203. };
  2204.  
  2205. insertSettings(struct tm_sys_set *set,struct tm_gau_set *list)
  2206. {
  2207.     struct ls_layout *src;
  2208.  
  2209.     set(NB_col  ,MUIA_Numeric_Value,set->colums);
  2210.     set(NB_bordx,MUIA_Numeric_Value,set->win_border_x);
  2211.     set(NB_bordy,MUIA_Numeric_Value,set->win_border_y);
  2212.     set(NB_spcx ,MUIA_Numeric_Value,set->win_space_x);
  2213.     set(NB_spcy ,MUIA_Numeric_Value,set->win_space_y);
  2214.     set(NB_wait ,MUIA_Numeric_Value,set->start_wait);
  2215.     set(NB_mem  ,MUIA_Numeric_Value,set->mem_refresh);
  2216.     set(NB_vol  ,MUIA_Numeric_Value,set->vol_refresh);
  2217.     set(NB_pri  ,MUIA_Numeric_Value,set->pri);
  2218.  
  2219.     DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src);
  2220.     src->entry_selected=set->bg_type;
  2221.     DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src);
  2222.     src->entry_selected=set->win_backfront;
  2223.     DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src);
  2224.     src->entry_selected=set->win_move;
  2225.     DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src);
  2226.     src->entry_selected=set->bd_type;
  2227.     DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src);
  2228.     src->entry_selected=set->start_usescreennotify;
  2229.     DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src);
  2230.     src->entry_selected=set->Executive;
  2231.  
  2232.     initColor(&set->bg_color,MN_Colors[0]);
  2233.     initColor(&set->bright_color,MN_Colors[1]);
  2234.     initColor(&set->dark_color,MN_Colors[2]);
  2235.  
  2236.     set(ST_PubScr,  MUIA_String_Contents    ,&set->pub_name[0]);
  2237.     set(IN_posx,    MUIA_String_Integer     ,set->x_pos);
  2238.     set(IN_posy,    MUIA_String_Integer     ,set->y_pos);
  2239.     set(IN_sizx,    MUIA_String_Integer     ,set->x_siz);
  2240.     set(ST_bg,      MUIA_String_Contents    ,&set->bg_picture[0]);
  2241.     set(CM_Falling, MUIA_Selected           ,set->lay_falling);
  2242.  
  2243.     DoMethod(visible,MUIM_List_Clear,0L);
  2244.     do
  2245.     {
  2246.     DoMethod(visible,MUIM_List_InsertSingle,list,MUIV_List_Insert_Bottom);
  2247.     }
  2248.     while(list=list->next);
  2249.     DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
  2250.     DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_All);
  2251. }
  2252.  
  2253. int getNum(struct tm_gau_set *list)
  2254. {
  2255.     int num=1;
  2256.     while(list=list->next)num++;
  2257.     return(num);
  2258. }
  2259.  
  2260. useDefault(struct tm_data *data)
  2261. {
  2262.     struct tm_gau_set   *many,
  2263.             *act,
  2264.             *old;
  2265.  
  2266.     CopyMem((char *)&default_set,data->set,sizeof(struct tm_sys_set));
  2267.     
  2268.     if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
  2269.     {
  2270.     many=&g1; data->list=act; CopyMem((char *)many,act,sizeof(struct tm_gau_set));
  2271.     while(many=many->next)
  2272.     {
  2273.         old=act;
  2274.         if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
  2275.         {
  2276.         old->next=act;
  2277.         CopyMem((char *)many,act,sizeof(struct tm_gau_set));
  2278.         }
  2279.         else {act->next=0L;return;}
  2280.     }
  2281.     act->next=0L;
  2282.     }
  2283.     else data->list=0L;
  2284. }
  2285.  
  2286.  
  2287. BOOL loadSettings(Object *obj,struct tm_data *data, char *file)
  2288. {
  2289.     ULONG  my_file;
  2290.     struct tm_gau_set *many,*act;
  2291.  
  2292.     if(!maindata->set)maindata->set=AllocVec(sizeof(struct tm_sys_set),0L);
  2293.  
  2294.     if(my_file=(UBYTE *)Open(file,MODE_OLDFILE))
  2295.     {
  2296.     if(!Read(my_file,data->set,(ULONG)sizeof(struct tm_sys_set)))
  2297.     {
  2298.         useDefault(data);
  2299.     }
  2300.     else
  2301.     {
  2302.         act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
  2303.         data->list=act; many=act;
  2304.         while(Read(my_file,(char *)act,(ULONG)sizeof(struct tm_gau_set)))
  2305.         {
  2306.         many=act;
  2307.         act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
  2308.         many->next=act;
  2309.         }
  2310.         many->next=NULL; FreeVec(act); act=NULL;
  2311.     }
  2312.     Close(my_file);
  2313.     }
  2314.     else useDefault(data);
  2315.  
  2316.     data->num_of_gaug=getNum(data->list);
  2317. }
  2318.  
  2319. ULONG loadManager(struct IClass *cl,Object *obj, struct LoadSetMsg *msg)
  2320. {
  2321.     char *file;
  2322.     switch (msg->what)
  2323.     {
  2324.     case    load_standard:
  2325.         loadSettings(obj,maindata,"ENV:TinyMeter");
  2326.         insertSettings(maindata->set,maindata->list);
  2327.         break;
  2328.     case    load_file:
  2329.         if(file=getfilename(obj,GetStr(MM_OpenTitle),"#?.tm",FALSE))
  2330.         {
  2331.             loadSettings(obj,maindata,file);
  2332.             insertSettings(maindata->set,maindata->list);
  2333.         }
  2334.         break;
  2335.     }
  2336.     return((ULONG)DoSuperMethodA(cl,obj,msg));
  2337. }
  2338.  
  2339. ///
  2340. /******************************************/
  2341. /* test settings and window snapping      */
  2342. /******************************************/
  2343. ///
  2344.  
  2345. #include <exec/memory.h>
  2346. #include <exec/ports.h>
  2347. #include <exec/execbase.h>
  2348.  
  2349. #define test_test       0
  2350. #define test_getwin     1
  2351.  
  2352. struct TestMessage
  2353. {
  2354.     struct  Message ts_Message;
  2355.  
  2356.     ULONG   MethodID;
  2357.  
  2358.     struct  tm_sys_set  *set;
  2359.     struct  tm_gau_set  *list;
  2360.  
  2361.     ULONG   posx,
  2362.         posy,
  2363.         sizx;
  2364. };
  2365.  
  2366. struct TestMessage  *ts_msg;
  2367. struct MsgPort      *p_port;
  2368. struct MsgPort      *p_reply;
  2369.  
  2370. BOOL SafePutToPort(struct Message *message, char *portname)
  2371. {
  2372.     struct MsgPort *port;
  2373.  
  2374.     Forbid();
  2375.     port = (struct MsgPort *)FindPort(portname);
  2376.     if (port) PutMsg(port, (struct Message *) message);
  2377.     Permit();
  2378.     return(port ? TRUE : FALSE);
  2379. }
  2380.  
  2381. ULONG InitTestSettings()
  2382. {
  2383.     if(
  2384.        ( ts_msg =(struct TestMessage *)AllocMem  (sizeof(struct TestMessage),MEMF_PUBLIC|MEMF_CLEAR)) &&
  2385.        ( p_reply=(struct MsgPort *)    CreatePort(0,0))
  2386.       )  return (1L);
  2387.     else return (0L);
  2388. }
  2389.  
  2390. FreeTestSettings()
  2391. {
  2392.     if(ts_msg) FreeMem      (ts_msg,sizeof(struct TestMessage));
  2393.     if(p_reply)DeletePort   (p_reply);
  2394. }
  2395.  
  2396. struct TestMessage *TestSettings(ULONG type)
  2397. {
  2398.     ULONG  i,j;
  2399.     struct tm_gau_set   *act,
  2400.             *all[64];
  2401.     if( FindPort("TinyMeter") )
  2402.     if( ts_msg && p_reply)
  2403.     {
  2404.     ts_msg->ts_Message.mn_Node.ln_Type  = NT_MESSAGE;
  2405.     ts_msg->ts_Message.mn_ReplyPort     = p_reply;
  2406.     ts_msg->ts_Message.mn_Length        = sizeof ( struct TestMessage );
  2407.     ts_msg->MethodID                    = type;
  2408.     switch (type)
  2409.     {
  2410.         case    test_test:
  2411.             for(i=0;i<64;i++)all[i]=0L;
  2412.             for(i=0;;i++)
  2413.             {
  2414.             DoMethod(visible,MUIM_List_GetEntry,i,&act);
  2415.             if(!act)  break;
  2416.             if(i==63) break;
  2417.             if(all[i]=AllocVec(sizeof(struct tm_gau_set),0L))
  2418.             {
  2419.                 CopyMem(act, all[i], sizeof(struct tm_gau_set));
  2420.             }
  2421.             else return(0L);
  2422.             }
  2423.             for(j=0;j<i;j++)
  2424.             {
  2425.             all[j]->next=all[j+1];
  2426.             }
  2427.             ts_msg->list=all[0];
  2428.  
  2429.             if(ts_msg->set = AllocVec(sizeof(struct tm_sys_set),0L))
  2430.             {
  2431.             CopyMem(maindata->set,ts_msg->set,sizeof(struct tm_sys_set));
  2432.             }
  2433.             else return(0L);
  2434.             break;
  2435.         case    test_getwin:
  2436.             ts_msg->list=0L;
  2437.             ts_msg->set =0L;
  2438.             break;
  2439.     }
  2440.     if (SafePutToPort((struct Message *)ts_msg,"TinyMeter"))
  2441.     {
  2442.         WaitPort(p_reply);
  2443.         return(GetMsg(p_reply));
  2444.     }
  2445.     }
  2446.     return(0L);
  2447. }
  2448.  
  2449. ///
  2450. /******************************************/
  2451. /* snapWindow method                      */
  2452. /******************************************/
  2453. ///
  2454. snapWindow(struct IClass *cl,Object *obj, struct Msg *msg)
  2455. {
  2456.     struct TestMessage *testMsg;
  2457.  
  2458.     testMsg=TestSettings(test_getwin);
  2459.  
  2460.     set(IN_posx,    MUIA_String_Integer     ,testMsg->posx);
  2461.     set(IN_posy,    MUIA_String_Integer     ,testMsg->posy);
  2462.     set(IN_sizx,    MUIA_String_Integer     ,testMsg->sizx);
  2463. }
  2464. ///
  2465. /******************************************/
  2466. /* save settings and the method for it    */
  2467. /******************************************/
  2468. ///
  2469. #define save_save      0
  2470. #define save_use       1
  2471. #define save_test      2
  2472. #define save_file      3
  2473. #define save_cancel    4
  2474.  
  2475. struct SaveSetMsg
  2476. {
  2477.     ULONG           MethodID;
  2478.     ULONG           what;
  2479. };
  2480.  
  2481. getSettings(struct tm_sys_set *set)
  2482. {
  2483.     ULONG   dummy;
  2484.     struct  ls_layout *src;
  2485.  
  2486.     get(NB_col  ,MUIA_Numeric_Value,&dummy);set->colums         =(UWORD)dummy;
  2487.     get(NB_bordx,MUIA_Numeric_Value,&dummy);set->win_border_x   =(UWORD)dummy;
  2488.     get(NB_bordy,MUIA_Numeric_Value,&dummy);set->win_border_y   =(UWORD)dummy;
  2489.     get(NB_spcx ,MUIA_Numeric_Value,&dummy);set->win_space_x    =(UWORD)dummy;
  2490.     get(NB_spcy ,MUIA_Numeric_Value,&dummy);set->win_space_y    =(UWORD)dummy;
  2491.     get(NB_wait ,MUIA_Numeric_Value,&dummy);set->start_wait     =(UWORD)dummy;
  2492.     get(NB_mem  ,MUIA_Numeric_Value,&dummy);set->mem_refresh    =(UWORD)dummy;
  2493.     get(NB_vol  ,MUIA_Numeric_Value,&dummy);set->vol_refresh    =(UWORD)dummy;
  2494.     get(NB_pri  ,MUIA_Numeric_Value,&dummy);set->pri            =(BYTE) dummy;
  2495.     get(CM_Falling,MUIA_Selected,   &dummy);set->lay_falling    =(UBYTE)dummy;
  2496.  
  2497.     DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src); set->bg_type              =src->entry_selected;
  2498.     DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src); set->win_backfront        =src->entry_selected;
  2499.     DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src); set->win_move             =src->entry_selected;
  2500.     DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src); set->bd_type              =src->entry_selected;
  2501.     DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src); set->start_usescreennotify=src->entry_selected;
  2502.     DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src); set->Executive            =src->entry_selected;
  2503.  
  2504.     getColor(&set->bg_color,    MN_Colors[0]);
  2505.     getColor(&set->bright_color,MN_Colors[1]);
  2506.     getColor(&set->dark_color,  MN_Colors[2]);
  2507.  
  2508.     get(ST_PubScr ,MUIA_String_Contents,&dummy); strcpy(&set->pub_name[0]   ,(char *)dummy);
  2509.     get(ST_bg     ,MUIA_String_Contents,&dummy); strcpy(&set->bg_picture[0] ,(char *)dummy);
  2510.     get(IN_sizx   ,MUIA_String_Integer, &dummy); set->x_siz=(UWORD)dummy;
  2511.     get(IN_posx   ,MUIA_String_Integer, &dummy); set->x_pos=(UWORD)dummy;
  2512.     get(IN_posy   ,MUIA_String_Integer, &dummy); set->y_pos=(UWORD)dummy;
  2513. }
  2514.  
  2515. static saveSettings(Object *listv, struct tm_sys_set *set, char *file)
  2516. {
  2517.     int                 i;
  2518.     ULONG               my_file;
  2519.     struct tm_gau_set   *act;
  2520.  
  2521.     if(my_file=(ULONG)Open(file,MODE_NEWFILE))
  2522.     {
  2523.     Write(my_file,set,(ULONG)sizeof(struct tm_sys_set));
  2524.     for (i=0;;i++)
  2525.     {
  2526.         DoMethod(listv,MUIM_List_GetEntry,i,&act);
  2527.         if(!act)  break;
  2528.         if(i==63) break;
  2529.         Write(my_file,act,(ULONG)sizeof(struct tm_gau_set));
  2530.     }
  2531.     Close(my_file);
  2532.     }
  2533. }
  2534.  
  2535. ULONG saveManager(struct IClass *cl,Object *obj, struct SaveSetMsg *msg)
  2536. {
  2537.     int i=0;
  2538.     char *file;
  2539.  
  2540.     getSettings(maindata->set);
  2541.     switch (msg->what)
  2542.     {
  2543.     case    save_save:
  2544.         saveSettings(visible,maindata->set,"ENVARC:TinyMeter");
  2545.     case    save_use:
  2546.         saveSettings(visible,maindata->set,"ENV:TinyMeter");
  2547.         TestSettings(test_test);
  2548.         while(pubscr[i]) FreeVec(pubscr[i++]);
  2549.         DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  2550.         return(0L);
  2551.     case    save_test:
  2552.         TestSettings(test_test);
  2553.         return(obj);
  2554.     case    save_file:
  2555.         if(file=getfilename(obj,GetStr(MM_SaveTitle),"#?.tm",TRUE))
  2556.             saveSettings(visible,maindata->set,file);
  2557.         break;
  2558.     case    save_cancel:
  2559.         loadSettings(obj,maindata,"ENV:TinyMeter");
  2560.         insertSettings(maindata->set,maindata->list);
  2561.         TestSettings(test_test);
  2562.         DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  2563.         break;
  2564.     }
  2565.     return((ULONG)DoSuperMethodA(cl,obj,msg));
  2566. }
  2567. ///
  2568. /******************************************/
  2569. /* other MainWindow methods               */
  2570. /******************************************/
  2571. ///
  2572. struct DoubleClkMsg
  2573. {
  2574.     ULONG   MethodID;
  2575.     struct  MainData *data;
  2576. };
  2577.  
  2578. static ULONG Dis_DoubleClick2(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  2579. {
  2580.     struct ls_layout *src;
  2581.  
  2582.     DoMethod(ls_Switch,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&src);
  2583.     if(src)
  2584.     {
  2585.     if(src->entry_max>0)
  2586.     {
  2587.         src->entry_selected++;if(src->entry_max<src->entry_selected)src->entry_selected=0;
  2588.         DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_Active);
  2589.     }
  2590.     return(DoSuperMethodA(cl,obj,msg));
  2591.     }
  2592.     else return(0L);
  2593. }
  2594.  
  2595. static ULONG Dis_DoubleClick1(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  2596. {
  2597.     char   *my_ptr;
  2598.  
  2599.     DoMethod(ls_PubScr,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
  2600.     if(my_ptr)
  2601.     {
  2602.     set(ST_PubScr,MUIA_String_Contents,my_ptr);
  2603.     DoMethod(PO_PubScr,MUIM_Popstring_Close,0L);
  2604.     return(DoSuperMethodA(cl,obj,msg));
  2605.     }
  2606.     else return(0L);
  2607. }
  2608.  
  2609. ULONG MainWindow_Finish(struct IClass *cl,Object *obj,Msg *msg)
  2610. {
  2611.     int i=0;
  2612.  
  2613.     struct MainData *data;
  2614.     data=INST_DATA(cl,obj);
  2615.     while(pubscr[i++]) FreeVec(pubscr[i]); pubscr[i]=0;
  2616.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  2617.     return((ULONG)0L);
  2618. }
  2619.  
  2620. static GetPubScreens()
  2621. {
  2622.     struct List     *PubScreenList;
  2623.     struct PubScreenNode *ScreenNode;
  2624.     int i=0;
  2625.     PubScreenList = LockPubScreenList();
  2626.     for(ScreenNode=(struct PubScreenNode *)PubScreenList->lh_Head;ScreenNode->psn_Node.ln_Succ;ScreenNode=(struct PubScreenNode *)ScreenNode->psn_Node.ln_Succ)
  2627.     {
  2628.     pubscr[i]=(char *)AllocVec(256L,0L);
  2629.     strcpy(pubscr[i],ScreenNode->psn_Node.ln_Name);
  2630.     i++;
  2631.     }
  2632.     UnlockPubScreenList();
  2633. }
  2634.  
  2635. static ULONG MainWindow_New(struct IClass *cl,Object *obj,Msg *msg)
  2636. {
  2637.     struct MainData *data;
  2638.     int    i;
  2639.     GetPubScreens();
  2640.     if (obj = (Object *)
  2641.     DoSuperNew(cl,obj,
  2642.         MUIA_Window_Title, GetStr(MO_Title),
  2643.         MUIA_Window_ID   , MAKE_ID('T','I','N','Y'),
  2644.         WindowContents, VGroup, ButtonFrame,
  2645.         Child, HGroup,
  2646.             Child, VGroup, MUIA_Background, MUII_SHADOW,
  2647.             Child, HVSpace,
  2648.             Child, BodychunkObject,
  2649.                 MUIA_FixWidth             , LOGO_WIDTH ,
  2650.                 MUIA_FixHeight            , LOGO_HEIGHT,
  2651.                 MUIA_Bitmap_Width         , LOGO_WIDTH ,
  2652.                 MUIA_Bitmap_Height        , LOGO_HEIGHT,
  2653.                 MUIA_Bodychunk_Depth      , LOGO_DEPTH ,
  2654.                 MUIA_Bodychunk_Body       , (UBYTE *)logo_body,
  2655.                 MUIA_Bodychunk_Compression, LOGO_COMPRESSION,
  2656.                 MUIA_Bodychunk_Masking    , LOGO_MASKING,
  2657.                 MUIA_Bitmap_SourceColors  , (ULONG *)logo_colors,
  2658.                 MUIA_Bitmap_Transparent   , 0,
  2659.                 MUIA_ShortHelp, "Greets to: hANGKOK, pEPE, bEZZZERK, tRACER, rALPH...",
  2660.             End,
  2661.             End,
  2662.             Child, RegisterGroup(mainlister),
  2663.             MUIA_Register_Frame, TRUE,
  2664.             Child, HGroup,
  2665.                 Child, RegisterGroup(sublister),
  2666.                 MUIA_Register_Frame, TRUE,
  2667.                 Child, HGroup,
  2668.                     Child, ColGroup(2), GroupFrameT(GetStr(MOL_Handler)),
  2669.                     Child, HVSpace,
  2670.                     Child, HVSpace,
  2671.                     Child, Label(GetStr(MO_MemRefresh)),
  2672.                     Child, ColGroup(2), Child, NB_mem=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  2673.                     Child, Label(GetStr(MO_VolRefresh)),
  2674.                     Child, ColGroup(2), Child, NB_vol=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  2675.                     Child, Label(GetStr(MO_Wait)),
  2676.                     Child, ColGroup(2), Child, NB_wait=MUI_MakeObject(MUIO_NumericButton,NULL,0,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  2677.                     Child, Label(GetStr(MO_TaskPrio)),
  2678.                     Child, ColGroup(2), Child, NB_pri=MUI_MakeObject(MUIO_NumericButton,NULL,-128,127,"%ld"), Child, HVSpace, End,
  2679.                     Child, HVSpace,
  2680.                     Child, HVSpace,
  2681.                     End,
  2682.                     Child, ColGroup(2), GroupFrameT(GetStr(MOL_sub_Layout)),
  2683.                     Child, HVSpace,
  2684.                     Child, HVSpace,
  2685.                     Child, Label(GetStr(MO_Colums)),
  2686.                     Child, ColGroup(2), Child, NB_col=MUI_MakeObject(MUIO_NumericButton,NULL,1,32,"%3ld"), Child, HVSpace, End,
  2687.                     Child, Label(GetStr(MO_FallingCol)),
  2688.                     Child, HGroup, Child, CM_Falling=CheckMark(NULL), Child, HVSpace, End,
  2689.                     Child, Label(GetStr(MO_SpaceX)),
  2690.                     Child, ColGroup(2), Child, NB_spcx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  2691.                     Child, Label(GetStr(MO_SpaceY)),
  2692.                     Child, ColGroup(2), Child, NB_spcy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  2693.                     Child, Label(GetStr(MO_BordX)),
  2694.                     Child, ColGroup(2), Child, NB_bordx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  2695.                     Child, Label(GetStr(MO_BordY)),
  2696.                     Child, ColGroup(2), Child, NB_bordy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  2697.                     Child, HVSpace,
  2698.                     Child, HVSpace,
  2699.                     End,
  2700.                 End,
  2701.                 Child, lv_Switch=(Object *)ListviewObject,
  2702.                     MUIA_Listview_Input, TRUE,
  2703.                     MUIA_Listview_DoubleClick, TRUE,
  2704.                     MUIA_Listview_List, ls_Switch=(Object *)ListObject,
  2705.                     MUIA_Frame, MUIV_Frame_InputList,
  2706.                     MUIA_List_ConstructHook, &lay_ConstructHook,
  2707.                     MUIA_List_DestructHook , &lay_DestructHook,
  2708.                     MUIA_List_DisplayHook  , &lay_DisplayHook,
  2709.                     MUIA_List_Format       , "MIW=5 MAW=100 BAR,",
  2710.                     MUIA_List_Active, MUIV_List_Active_Top,
  2711.                     End,
  2712.                 End,
  2713.                 Child, ColGroup(2),
  2714.                     Child, HVSpace,
  2715.                     Child, HVSpace,
  2716.                     Child, Label(GetStr(MO_Public)),
  2717.                     Child, PO_PubScr=(Object *)PopobjectObject,
  2718.                     MUIA_Popstring_String, ST_PubScr=(Object *)String(NULL,80),
  2719.                     MUIA_Popstring_Button, PopButton(MUII_PopUp),
  2720.                     MUIA_Popobject_Object, lv_PubScr=(Object *)ListviewObject,
  2721.                         MUIA_Listview_Input, TRUE,
  2722.                         MUIA_Listview_DoubleClick, TRUE,
  2723.                         MUIA_Listview_List, ls_PubScr=(Object *)ListObject,
  2724.                         MUIA_Frame, MUIV_Frame_InputList,
  2725.                         MUIA_List_Active, MUIV_List_Active_Top,
  2726.                         MUIA_List_SourceArray,&pubscr[0],
  2727.                         End,
  2728.                     End,
  2729.                     End,
  2730.                     Child, Label(GetStr(MO_WindowPos)),
  2731.                     Child, ColGroup(2),
  2732.                     Child, IN_posx=StringObject,
  2733.                         StringFrame,
  2734.                         MUIA_String_Accept , "0123456879",
  2735.                     End,
  2736.                     Child, IN_posy=StringObject,
  2737.                         StringFrame,
  2738.                         MUIA_String_Accept , "0123456879",
  2739.                     End,
  2740.                     End,
  2741.                     Child, Label(GetStr(MO_WindowSiz)),
  2742.                     Child, ColGroup(2),
  2743.                     MUIA_Group_SameWidth, TRUE,
  2744.                     Child, IN_sizx=StringObject,
  2745.                         StringFrame,
  2746.                         MUIA_String_Accept , "0123456879",
  2747.                     End,
  2748.                     Child, BT_Snap=SimpleButton(GetStr(MO_Snap)),
  2749.                     End,
  2750.                     Child, Label(GetStr(MO_BackgroundPic)),
  2751.                     Child, ST_bg=PopaslObject,
  2752.                     MUIA_Popstring_String, String(NULL,80),
  2753.                     MUIA_Popstring_Button, PopButton(MUII_PopFile),
  2754.                     ASLFO_TitleText  , GetStr(MO_SelectBg),
  2755.                     End,
  2756.                     Child, Label(GetStr(MO_BackgroundCol)),
  2757.                     Child, ColGroup(2),Child, MN_Colors[0]=MakePen(), Child, HVSpace, End,
  2758.                     Child, Label(GetStr(MO_BrightCol)),
  2759.                     Child, ColGroup(2),Child, MN_Colors[1]=MakePen(), Child, HVSpace, End,
  2760.                     Child, Label(GetStr(MO_DarkCol)),
  2761.                     Child, ColGroup(2),Child, MN_Colors[2]=MakePen(), Child, HVSpace, End,
  2762.                     Child, HVSpace,
  2763.                     Child, HVSpace,
  2764.                 End,
  2765.                 End,
  2766.             End,
  2767.             Child, VGroup,
  2768.                 Child, NewObject(CL_ChooseFields->mcc_Class,NULL,TAG_DONE),
  2769.             End,
  2770.             End,
  2771.         End,
  2772.         Child, HGroup,
  2773.             Child, BT_Save = (Object *)SimpleButton(GetStr(MO_Save)),
  2774.             Child, BT_Use = (Object *)SimpleButton(GetStr(MO_Use)),
  2775.             Child, BT_Test = (Object *)SimpleButton(GetStr(MO_Test)),
  2776.             Child, BT_Cancel = (Object *)SimpleButton(GetStr(MO_Cancel)),
  2777.         End,
  2778.         End,
  2779.     End)
  2780.     {
  2781.     data=INST_DATA(cl,obj);
  2782.     set(BT_Save     ,MUIA_ShortHelp,GetStr(MH_Save));
  2783.     set(BT_Use      ,MUIA_ShortHelp,GetStr(MH_Use));
  2784.     set(BT_Test     ,MUIA_ShortHelp,GetStr(MH_Test));
  2785.     set(BT_Cancel   ,MUIA_ShortHelp,GetStr(MH_Cancel));
  2786.     set(NB_mem      ,MUIA_ShortHelp,GetStr(MH_MemRefresh));
  2787.     set(NB_vol      ,MUIA_ShortHelp,GetStr(MH_VolRefresh));
  2788.     set(NB_wait     ,MUIA_ShortHelp,GetStr(MH_Wait));
  2789.     set(lv_Switch   ,MUIA_ShortHelp,GetStr(MH_Flags));
  2790.     set(PO_PubScr   ,MUIA_ShortHelp,GetStr(MH_Public));
  2791.     set(IN_posx     ,MUIA_ShortHelp,GetStr(MH_PosX));
  2792.     set(IN_posy     ,MUIA_ShortHelp,GetStr(MH_PosY));
  2793.     set(IN_sizx     ,MUIA_ShortHelp,GetStr(MH_SizX));
  2794.     set(BT_Snap     ,MUIA_ShortHelp,GetStr(MH_Snap));
  2795.     set(ST_bg       ,MUIA_ShortHelp,GetStr(MH_BackgroundPic));
  2796.     set(MN_Colors[0],MUIA_ShortHelp,GetStr(MH_BackgroundCol));
  2797.     set(MN_Colors[1],MUIA_ShortHelp,GetStr(MH_BrightCol));
  2798.     set(MN_Colors[2],MUIA_ShortHelp,GetStr(MH_DarkCol));
  2799.     set(NB_col      ,MUIA_ShortHelp,GetStr(MH_Colums));
  2800.     set(NB_spcx     ,MUIA_ShortHelp,GetStr(MH_SpaceX));
  2801.     set(NB_spcy     ,MUIA_ShortHelp,GetStr(MH_SpaceX));
  2802.     set(NB_bordx    ,MUIA_ShortHelp,GetStr(MH_BordX));
  2803.     set(NB_bordy    ,MUIA_ShortHelp,GetStr(MH_BordY));
  2804.     DoMethod(BT_Snap  ,MUIM_Notify,MUIA_Pressed                ,FALSE   ,obj,1,Dis_ID_Snap);
  2805.     DoMethod(BT_Save  ,MUIM_Notify,MUIA_Pressed                ,FALSE   ,obj,2,Dis_ID_Save,save_save);
  2806.     DoMethod(BT_Use   ,MUIM_Notify,MUIA_Pressed                ,FALSE   ,obj,2,Dis_ID_Save,save_use );
  2807.     DoMethod(BT_Test  ,MUIM_Notify,MUIA_Pressed                ,FALSE   ,obj,2,Dis_ID_Save,save_test);
  2808.     DoMethod(lv_PubScr,MUIM_Notify,MUIA_Listview_DoubleClick   ,TRUE    ,obj,2,Dis_ID_DoubleClick1,data);
  2809.     DoMethod(lv_Switch,MUIM_Notify,MUIA_Listview_DoubleClick   ,TRUE    ,obj,1,Dis_ID_DoubleClick2);
  2810.     DoMethod(obj      ,MUIM_Notify,MUIA_Window_MenuAction      ,MEN_SAVE,obj,2,Dis_ID_Save,save_file);
  2811.     DoMethod(obj      ,MUIM_Notify,MUIA_Window_MenuAction      ,MEN_OPEN,obj,2,Dis_ID_Load,load_file);
  2812.     DoMethod(BT_Cancel,MUIM_Notify,MUIA_Pressed                ,FALSE   ,obj,2,Dis_ID_Save,save_cancel);
  2813.     for(i=0;i<8;i++)DoMethod(ls_Switch,MUIM_List_InsertSingle,&switches[i],MUIV_List_Insert_Bottom);
  2814.     DoMethod(obj      ,Dis_ID_Load,load_standard);
  2815.     }
  2816.     return((ULONG)obj);
  2817. }
  2818. ///
  2819.  
  2820. static __saveds __asm ULONG MainWindowDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  2821. {
  2822.     switch (msg->MethodID)
  2823.     {
  2824.         case OM_NEW              : return (MainWindow_New    (cl,obj,(APTR)msg));
  2825.         case Dis_ID_Finish       : return (MainWindow_Finish (cl,obj,(APTR)msg));
  2826.         case Dis_ID_DoubleClick1 : return (Dis_DoubleClick1  (cl,obj,(APTR)msg));
  2827.         case Dis_ID_DoubleClick2 : return (Dis_DoubleClick2  (cl,obj,(APTR)msg));
  2828.         case Dis_ID_Save         : return (saveManager       (cl,obj,(APTR)msg));
  2829.         case Dis_ID_Snap         : return (snapWindow        (cl,obj,(APTR)msg));
  2830.         case Dis_ID_Load         : return (loadManager       (cl,obj,(APTR)msg));
  2831.     }
  2832.     return (DoSuperMethodA    (cl,obj,(APTR)msg));
  2833. }
  2834.  
  2835. /*************************************************/
  2836. /* Init all classes                              */
  2837. /*************************************************/
  2838. ///
  2839. VOID ExitClasses(VOID)
  2840. {
  2841.     if (CL_FieldsList  ) MUI_DeleteCustomClass(CL_FieldsList);
  2842.     if (CL_ChooseFields) MUI_DeleteCustomClass(CL_ChooseFields);
  2843.     if (CL_MainWindow)   MUI_DeleteCustomClass(CL_MainWindow);
  2844.     if (CL_Composer)     MUI_DeleteCustomClass(CL_Composer);
  2845.     if (CL_Launcher)     MUI_DeleteCustomClass(CL_Launcher);
  2846. }
  2847.  
  2848. BOOL InitClasses(VOID)
  2849. {
  2850.     CL_MainWindow    = MUI_CreateCustomClass(NULL,MUIC_Window   ,NULL, sizeof(struct MainData)           ,MainWindowDispatcher);
  2851.     CL_FieldsList    = MUI_CreateCustomClass(NULL,MUIC_List     ,NULL, sizeof(struct FieldsList_Data)    ,FieldsList_Dispatcher);
  2852.     CL_ChooseFields  = MUI_CreateCustomClass(NULL,MUIC_Group    ,NULL, sizeof(struct ChooseFields_Data)  ,ChooseFields_Dispatcher);
  2853.     CL_Composer      = MUI_CreateCustomClass(NULL,MUIC_Window   ,NULL, sizeof(struct Composer_Data)      ,ComposerDispatcher);
  2854.     CL_Launcher      = MUI_CreateCustomClass(NULL,MUIC_Window   ,NULL, sizeof(struct Launcher_Data)      ,LauncherDispatcher);
  2855.     if ( CL_FieldsList && CL_ChooseFields && CL_MainWindow && CL_Composer && CL_Launcher ) return(TRUE);
  2856.     ExitClasses();
  2857.     return(FALSE);
  2858. }
  2859. ///
  2860. /*************************************************/
  2861. /* Main: MUIApplication and Aboutwindow          */
  2862. /*************************************************/
  2863. ///
  2864.  
  2865. #include <exec/tasks.h>
  2866.  
  2867. #ifdef _DCC
  2868.  
  2869. int brkfunc(void) { return(0); }
  2870.  
  2871. #endif
  2872.  
  2873. void LocalizeSwitches(struct ls_layout *ll)
  2874. {
  2875.     int i;
  2876.     for (;ll->entry_desc!=NULL;ll++)
  2877.     {
  2878.     ll->entry_desc=GetStr((int)ll->entry_desc);
  2879.     for(i=0;i<6;i++)
  2880.     {
  2881.         if (ll->entry[i]!=NULL) ll->entry[i]=GetStr((int)ll->entry[i]);
  2882.         else ll->entry[i]=" ";
  2883.     }
  2884.     }
  2885. }
  2886.  
  2887. int main(int argc, char *argv[])
  2888. {
  2889.     Object          *app,
  2890.             *window;
  2891.     struct  Task    *me;
  2892.  
  2893.     if (MUIMasterBase = OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN))
  2894.     {
  2895.     if(me=FindTask(NULL))
  2896.     {
  2897.         if((me->tc_SPUpper-me->tc_SPLower)>8000)
  2898.         {
  2899.         if(maindata=(struct tm_data *)AllocVec(sizeof(struct tm_data),MEMF_CLEAR))
  2900.         {
  2901.             if(InitTestSettings())
  2902.             {
  2903.             InitClasses();
  2904.             InitLocale();
  2905.             LocalizeNewMenu(MenuData1);
  2906.             LocalizeNewMenu(CmpMenuData);
  2907.             LocalizeNewMenu(LauMenuData);
  2908.             LocalizeSwitches(switches);
  2909.             LocalizeStringArray(gau_types);
  2910.             LocalizeStringArray(types);
  2911.             LocalizeStringArray(indent);
  2912.             LocalizeStringArray(mainlister);
  2913.             LocalizeStringArray(sublister);
  2914.             LocalizeStringArray(regcomposer);
  2915.             LocalizeStringArray(reglauncher);
  2916.             LocalizeStringArray(cyplace);
  2917.             LocalizeStringArray(cyindent);
  2918.             strcpy(&default_gauge.label[0],GetStr(MDef_Label));
  2919.             strcpy(&default_gauge.format[0],GetStr(MDef_fmt));
  2920.             strcpy(&default_gauge.expansion[0],GetStr(MDef_Device));
  2921.  
  2922.             app = ApplicationObject,
  2923.                 MUIA_Application_Title      ,   "TinyMeterPrefs V4.22",
  2924.                 MUIA_Application_Version    ,   "$VER: TinyMeterPrefs V4.22 (21.03.95)",
  2925.                 MUIA_Application_Copyright  ,   "©1994-95, Tinic Urou",
  2926.                 MUIA_Application_Author     ,   "Tinic Urou",
  2927.                 MUIA_Application_Description,   GetStr(MA_Description),
  2928.                 MUIA_Application_Base       ,   "TMPREFS",
  2929.                 MUIA_Application_HelpFile   ,   "HELP:TinyMeter.guide",
  2930.                 MUIA_Application_Menustrip  ,   MN_Main = MUI_MakeObject(MUIO_MenustripNM,MenuData1,0),
  2931.                 SubWindow                   ,   window = (Object *)NewObject(CL_MainWindow->mcc_Class,NULL,TAG_DONE),
  2932.                 SubWindow                   ,   WI_About = WindowObject,
  2933.                                     MUIA_Window_Title, GetStr(MA_About_Title),
  2934.                                     MUIA_Window_ID   , MAKE_ID('T','M','A','B'),
  2935.                                     WindowContents, VGroup, ButtonFrame,
  2936.                                     Child, BodychunkObject,
  2937.                                         MUIA_FixWidth             , ABOUT_WIDTH ,
  2938.                                         MUIA_FixHeight            , ABOUT_HEIGHT,
  2939.                                         MUIA_Bitmap_Width         , ABOUT_WIDTH ,
  2940.                                         MUIA_Bitmap_Height        , ABOUT_HEIGHT,
  2941.                                         MUIA_Bodychunk_Depth      , ABOUT_DEPTH ,
  2942.                                         MUIA_Bodychunk_Body       , (UBYTE *)about_body,
  2943.                                         MUIA_Bodychunk_Compression, ABOUT_COMPRESSION,
  2944.                                         MUIA_Bodychunk_Masking    , ABOUT_MASKING,
  2945.                                         MUIA_Bitmap_SourceColors  , (ULONG *)about_colors,
  2946.                                         MUIA_Bitmap_Transparent   , 0,
  2947.                                     End,
  2948.                                     End,
  2949.                                 End,
  2950.                 SubWindow                   ,   WI_HelpFmt = WindowObject,
  2951.                                     MUIA_Window_Title, GetStr(MH_FormatHelp),
  2952.                                     MUIA_Window_ID  , MAKE_ID('T','H','L','P'),
  2953.                                     WindowContents, VGroup,
  2954.                                     Child, ScrollgroupObject,
  2955.                                         MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
  2956.                                         Child, TextObject,
  2957.                                             MUIA_Text_Contents, GetStr(MOH_Format),
  2958.                                         End,
  2959.                                         End,
  2960.                                     End,
  2961.                                     End,
  2962.                                 End,
  2963.                 SubWindow                   ,   WI_HelpClock = WindowObject,
  2964.                                     MUIA_Window_Title, GetStr(MH_ClockHelp),
  2965.                                     MUIA_Window_ID  , MAKE_ID('T','H','L','P'),
  2966.                                     WindowContents, VGroup,
  2967.                                     Child, ScrollgroupObject,
  2968.                                         MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
  2969.                                         Child, TextObject,
  2970.                                             MUIA_Text_Contents, GetStr(MOH_Clock),
  2971.                                         End,
  2972.                                         End,
  2973.                                     End,
  2974.                                     End,
  2975.                                 End,
  2976.                   End;
  2977.  
  2978.             if(app)
  2979.             {
  2980.                 DoMethod(app         ,MUIM_Notify,MUIA_Application_MenuAction,MEN_QUIT ,app     ,    2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit);
  2981.                 DoMethod(app         ,MUIM_Notify,MUIA_Application_MenuAction,MEN_ABOUT,WI_About,    3,MUIM_Set                  ,MUIA_Window_Open,TRUE);
  2982.                 DoMethod(WI_About    ,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_About,    3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2983.                 DoMethod(WI_HelpFmt  ,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_HelpFmt,  3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2984.                 DoMethod(WI_HelpClock,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_HelpClock,3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2985.                 DoMethod(window,      MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,app,         2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit);
  2986.                 set(window,MUIA_Window_Open,TRUE);
  2987.                 {
  2988.                 ULONG sigs = 0;
  2989.                 while (DoMethod(app,MUIM_Application_NewInput,&sigs) != MUIV_Application_ReturnID_Quit)
  2990.                 {
  2991.                     if (sigs)
  2992.                     {
  2993.                         sigs = Wait(sigs | SIGBREAKF_CTRL_C);
  2994.                         if (sigs & SIGBREAKF_CTRL_C) break;
  2995.                     }
  2996.                 }
  2997.                 }                   
  2998.                 MUI_DisposeObject(app);
  2999.             }
  3000.             ExitLocale();
  3001.             ExitClasses();
  3002.             FreeTestSettings();
  3003.             }
  3004.             if(maindata->set)FreeVec(maindata->set);
  3005.             FreeVec(maindata);
  3006.         }
  3007.         }
  3008.         else MUI_RequestA(NULL,NULL,0,"Early Startup","OK","Stacksize too small!\n\nA minimum of 8192 bytes is needed.",NULL);
  3009.     }
  3010.     CloseLibrary(MUIMasterBase);
  3011.     }
  3012.     return(0);
  3013. }
  3014.  
  3015. int wbmain(struct WBStartup *wb_startup)
  3016. {
  3017.     return(main(0, (char **)wb_startup));
  3018. }
  3019.  
  3020. ///
  3021.